用instanceof测试对象

时间:2013-03-13 15:20:52

标签: javascript

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

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

当我检查this instanceof google时,上面没有提醒,但是当我这样做时,相同的代码也能正常工作。

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对象传递给我的函数makeBeer,我怎么知道它的newWay对象呢。

2 个答案:

答案 0 :(得分:1)

变量“google”引用的对象实际上只是一个普通对象。标识符“google”只是一个变量名称。 instanceof运算符告诉对象来自何处,而不是引用它的变量。

答案 1 :(得分:1)

来自MDN entry on instanceof

  

instanceof运算符测试对象在其原型链中是否具有构造函数的prototype属性。

因此,除非您使用唯一的构造函数创建对象,例如:

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

其中newWay instanceof Way === true,你不能使用instanceof告诉你除了它是一个对象以外的任何东西。