WEB开发网
开发学院网页设计JavaScript FF JavaScript引擎私有属性全解 阅读

FF JavaScript引擎私有属性全解

 2010-09-14 13:27:55 来源:WEB开发网   
核心提示:FF里面有不少让人爱不释手的私有属性和方法 它们没有被ECMAScript支持 但却非常好用 所有这些属性都是__XXXX__这种形式在FF2.0 JS引擎SpiderMonkey1.7版本下可以使用的所有私有属性(这个应该是比较全的 我从源码里面找的)JavaScript 1.0__count__表示一个对象的自身的

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

Tags:FF JavaScript 引擎

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接