FF JavaScript引擎私人屬性全解

來源:互聯網
上載者:User

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);

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.