2013-05-05 48 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

相關問題