2013-03-13 82 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