FF裡面有不少讓人愛不釋手的私人屬性和方法 它們沒有被ECMAScript支援 但卻非常好用 所有這些屬性都是__XXXX__這種形式
在FF2.0 JS引擎SpiderMonkey1.7版本下可以使用的所有私人屬性(這個應該是比較全的 我從源碼裡面找的)
JavaScript 1.0
__count__
表示一個對象的自身的屬性個數 即hasOwnProperty為true的屬性
var o={a:1,b:2};
alert(o.__count__);
__parent__
表示對象定義時所在的scopeChain 一般只有函數對象有用 而且會因為某些最佳化而不可預料
var o={a:1,b:2};
alert(o.__parent__);
__proto__
表示對象的原型 即是原型鏈的指標
var o0={c:3}
var o={a:1,b:2};
alert(o.c);
o.__proto__=o0;
alert(o.c);
__defineGetter__
函數 定義一個對象屬性的getter 類似C#
var o={};
var a="Hello!";
o.__defineGetter__("a",function(){return a;});
alert(o.a);
a="Hi";
alert(o.a);
__defineSetter__
函數 定義一個對象屬性的setter
var o={};
var a;
o.__defineSetter__("a",function(v){a=v;});
o.a="Hello!";
alert(a);
__lookupGetter__
尋找某一getter是否存在
__lookupSetter__
尋找某一setter是否存在
var o={};
o.__defineSetter__("a",function(v){a=v;});
alert(o.__lookupSetter__("a"));
JavaScript 1.5
__noSuchMethod__
當訪問某一對象不存在的屬性時的行為
var obj={};
obj.__noSuchMethod__ = function __noSuchMethod__ (id, args) {
alert(id);
}
obj.OOXX();
obj.XXOO();
JavaScript 1.7
__iterator__
Iterator對象使用的屬性 可以改變for in之類的預設行為
var range={from:1,to:10};
range.__iterator__=function(){
return {
current:this.from,
to:this.to,
next:function(){
if(this.current>this.to)throw StopIteration;
return this.current++;
}
}
}
for(var i in range)
alert(i);