FF JavaScript引擎私有属性全解

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


 

posted @ 2008-06-19 11:34  winter-cn  阅读(1200)  评论(2编辑  收藏  举报