2013-05-05 51 views
1

我读的地方,Object.__proto__Object.prototype指向同一件事和Object.prototype是标准的方式,但昨晚我试图继承与Object.prototype一类,但它没有工作,然后我试图找出是否同时Object.__proto__Object.prototype指向同一事物或not.To我吃惊的是Object.prototype不能正常工作,但是Object .__ proto__工作原因是什么?如何让我的代码在所有浏览器中工作?

alert(Object.__proto__===Object.prototype); 

在alertbox 显示false所以要找出哪一个作品我写了下面的代码

function Cx(){ 
    this.objName="i m X"; 
    this.prototype={ }; 
    this.prototype.getMyName=function(){ 
alert(this.objName); 
     } 
    this.__proto__={ }; 
    this.__proto__.hMyName=function(){ 
alert("I am hMyName"); 
     } 
    } 
    function InheritCx(){ 
//var y=new Cx(); 
this.objName="I am InheritCx"; 
this.__proto__=new Cx(); 

    } 
    y= new InheritCx(); 
    y.hMyName();//displayes "I am hMyName" in alertbox when using chrome or mozilla 
    y.getMyName();//displays an error in chrome and mozilla 

这两者之间有什么区别,为什么标准代码不起作用? 此外,我有兴趣知道在大多数浏览器(IE 6-8,9,10,chrome,firefox,mozilla,opera和webkit)中做什么样的原型继承工作?

+0

'对象.__ proto__ === Function.prototype',至少在Chrome(见下面的评论) – 2013-05-05 05:22:51

+1

*“我读的地方,'对象.__ proto__'和'Object.prototype'指向一样...”*。不。 'Object'是一个函数,所以'Object.__ proto__'将是'Function.prototype'。 – 2013-05-05 05:22:53

+0

@FabrícioMatté很酷。在我们实际使用它之前,我们需要等待的IE版本是什么(严重问题)? – 2013-05-05 05:27:41

回答

3

.__proto__是一个非标准获取给定对象继承的下一个对象的方法。阅读酒店相当于标准Object.getPrototypeOf()

var o = {}; // new object 

console.log(o.__proto__ === Object.getPrototypeOf(o)); // true 

函数的.prototype属性是调用该函数作为构造(使用new时新对象将从继承该对象被创建。

所以,如果我们把一个功能,通过使用new调用它作为一个构造函数,然后采取新的对象,并要求其__proto__,这将是相同的对象的构造函数的.prototype属性中找到。

function Ctor() { 
    // our constructor function 
} 

var o = new Ctor(); 

console.log(o.__proto__ === Ctor.prototype); // true 
+0

+1不知道'getPrototypeOf'。尽管'__proto__'正在成为ES6草案的标准,对吧? – 2013-05-05 05:27:26

+1

@FabrícioMatté:从上次查看ES6草案开始,它作为浏览器环境的可选属性包含在最后的appendex中。所以基本上似乎承认它的存在。不知道现在的情况。 – 2013-05-05 05:29:30

+0

我明白了。这个[相关答案](http://stackoverflow.com/a/13841694/1331430)表示,它应该在ES6中标准化,目前在[B.3.1]附件B(规范性标准)(http:///people.mozilla.org/~jorendorff/es6-draft.html#sec-B.3.1)。 – 2013-05-05 05:36:22

相关问题