2013-03-13 69 views
0
var google = { 
    makeBeer : function(arg1,arg2){  
     alert([this instanceof google, arg1, arg2]);   
    }  
} 

google.makeBeer('water','soda'); 

上面沒有提示當我檢查this instanceof google,但是當我這樣做時,相同的代碼工作。使用instanceof測試對象

var google = { 
    makeBeer : function(arg1,arg2){  
     alert([this instanceof Object, arg1, arg2]);   
    }  
} 

google.makeBeer('water','soda'); 

參考'this'是Object的實例,爲什麼不是Google Object。我如何確保實例是我的情況下的特定對象。

更新到同一個問題:

var newWay = {} 
google.makeBeer.call(newWay, 'pepsi', 'coke'); 

在上述情況下,我經過NEWWAY反對我funcion makeBeer,我怎麼能知道它的NEWWAY對象這裏。

+0

即使在你的更新中,你仍然有一個普通的對象。沒有什麼特別的。 – Mathletics 2013-03-13 15:26:27

+0

@Mathletics:那很好,但我怎麼能區分這兩個... – Kevin 2013-03-13 15:27:08

+1

你需要使用這種模式構造你的對象: function Way(){} var newWay = new Way() – 2013-03-13 15:30:35

回答

1

MDN entry on instanceof

instanceof運算測試對象是否在其原型鏈有一個構造的原型屬性。

所以,除非你創建了一個獨特的構造函數的對象,像:

var newWay = new Way(); // assuming you have defined an object Way 

其中newWay instanceof Way === true,你不能使用instanceof告訴你以外,它是一個對象的任何其他。

+0

優秀.....爲什麼這樣呢?爲什麼不能沒有一個唯一的構造函數...對象文字是指什麼...... – Kevin 2013-03-13 15:32:26

+0

@Kevin對象文字是一個簡單的新Object(),它包含關鍵值對。所有的'對象'就是那個'對象'。 – Mathletics 2013-03-13 15:36:38

+0

爲什麼在後面的情況下它不工作,除非我構造它,如果全部是對象。 – Kevin 2013-03-13 15:41:13

1

變量「google」引用的對象實際上只是一個普通對象。標識符「google」只是一個變量名。 instanceof運算符告訴對象來自哪裏,而不是指什麼變量引用它。

+0

我已經更新了我的問題,我們在一個函數中調用方法...在這種情況下,我可以參考 – Kevin 2013-03-13 15:25:36