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...