Javascript 存取物件屬性的方式

2013年2月28日 星期四

在取動態物件時會需要用到

JavaScript 有兩種方式可以用來存取物件屬性,假設我們有以下這個物件:

var myObject = {
att1: '123',
att2: '456',
func1: function () {},
func2: function () {}
}


第一種存取的方法是用 JavaScript 的物件屬性存取子「句點 (.) 」:



myObject.attr1;
myObject.attr2;
myObject.func1();
myObject.func2();

第二種方法是利用關聯索引來存取:

myObject['attr1'];
myObject['attr2'];
myObject['func1']();
myObject['func2']();

為什麼要有第二種方法呢?這就是今天的主題了,如果今天我要動態存取物件屬性要怎麼做呢?




動態存取



找出myObject 物件裡的各項屬性,可以用以下的方法



for (var attrName in myObject) {
alert(attrName + ':' + 每個屬性的值);
}


這裡 attrName 會依序是 attr1, attr2, func1, func2 ,那麼我們怎麼抓到每個屬性的值呢?



那就是用第二種方法:



for (var attrName in myObject) {
alert(attrName + ':' + myObject[attrName]);
}


在這裡 attrName 會自動轉型成字串,用來當做關聯索引的值,也讓我們能夠存取到 myObject 物件裡對應的資訊。



那為什麼不能用第一種方法呢?



for (var attrName in myObject) {
alert(attrName + ':' + myObject.attrName); // myObject.attrName 可以嗎?
}

因為 JavaScript 規定在句點後面不能接上一個變數,所以如果我們用 myObject.attrName 的話,會被 JavaScript 解釋成要存取 myObject 的 attrName 屬性。

那可以用eval嗎?



for (var attrName in myObject) {
alert(attrName + ':' + eval('myObject.' + attrName));
}

儘可能別用eval,因為他會拖慢速度,所以還是用第二種方式就好啦。

Read more...

$(window).scrollTop() vs. $(document).scrollTop()

2013年2月19日 星期二

筆記一下

They are both going to have the same effect.

Both scroll to the top of the object, an html document is considered the "document" thus scrolling to the top of the html page. A "window" object is created with each frame, thus your main window is one frame, if you had an "iframe" that would create another window object. So your just scrolling to the top of the window object, creating the same effect.

It seems that the window object is buggy when it comes to this. It apprently does not work in IE8 and Opera, so it is best to use $("html").scrollTop().

所以最好是用$("html").scrollTop().可支援多瀏覽器

 

 

 

 

資料來源:http://stackoverflow.com/questions/5371139/window-scrolltop-vs-document-scrolltop

Read more...

Cursor

2013年1月8日 星期二

Cursor可以看成是一個存資料集的物件,並且可以將資料一筆一筆取出來處理。

http://www.dotblogs.com.tw/lastsecret/archive/2010/06/18/15954.aspx

Read more...

Static與Auto之不同處

2012年12月21日 星期五

auto由程式自動控制變數的生命週期,通常指的就是變數在進入其作用範圍的時候被分配,離開其作用範圍時被釋放;而static就是不auto,變數在程式開始時被載入記憶體,直到程式退出前才被釋放;也就是static是按照程式的生命週期來分配釋放變數的,而不是變數自己的生命週期。

範例:

public class EditPicture
{
public static EditPicture getInstance()
{
return new EditPicture();
}

public void Edit(int id)
{
//修改圖片方法
}

public void Add()
{
//新增圖片方法
}

}


 



如果只會用到處理圖片可以這樣寫



public class Product
{
public void ProductEdit(int id)
{
//處理圖片
EditPicture.getInstance().Edit(id);
}
}


若需要用到add及edit則要用以下方式寫



public class Product
{
public void PictureProcess(int id)
{
EditPicture obj = new EditPicture();
obj.Add();
obj.Edit(id);
}
}


這樣寫會佔用太多記憶體資源是不對的



public class Product
{
public void PictureProcess(int id)
{
EditPicture.getInstance().Edit(id);
EditPicture.getInstance().Add();
}
}


 



參考來源:http://www.dotblogs.com.tw/darren.net/archive/2008/08/12/4870.aspx

Read more...

Lambda表示式

2012年12月17日 星期一

(input parameters)  =>  { expression }

左邊想成傳入方法的參數,用  " => " 運算子連接,右邊是 方法的內容。

 

var list  = db.user.where(p=>p.userID = "neil").Select(vo=>
{
vo.name = "蔡小明";
return vo;
}

Read more...

簡易克服 CSS 被瀏覽器快取(Cache)的問題

2012年12月11日 星期二

今天同事遇到了,在測試機上直接修改了xxx.js確發生沒有作用這可能是因為被proxy或是waf快取,所以才會發生這樣的問題

只要在後面加入日期即可 例: xxx.js?20121212

 

 

詳細可參考 http://blog.miniasp.com/post/2008/02/03/Avoid-browser-cache-problem-on-css-or-javascript-file.aspx

Read more...

日期相加

2012年11月8日 星期四

javascipt之日期相加

常用到所以做個筆記

 

//日期相加
function addDate(dateObj,days)
{
var tempDate = dateObj.valueOf();
tempDate = tempDate + days * 24 * 60 * 60 * 1000;
tempDate = new Date(tempDate);
return tempDate;
}

Read more...