Javascript 使用instanceof测试对象

Javascript 使用instanceof测试对象,javascript,Javascript,当我检查google的这个实例时,上面的代码不会发出警报,但是当我这样做时,同样的代码会起作用 var google = { makeBeer : function(arg1,arg2){ alert([this instanceof google, arg1, arg2]); } } google.makeBeer('water','soda'); 引用“this”是Object的实例,为什么不使用Google对象。在

当我检查google的这个实例时,上面的代码不会发出警报,但是当我这样做时,同样的代码会起作用

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

google.makeBeer('water','soda');
引用“this”是Object的实例,为什么不使用
Google对象
。在我的案例中,如何确保实例是该特定对象的实例

更新同一问题:

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

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

在上面的例子中,我将newWay对象传递给我的函数makeBeer,我如何知道这里的newWay对象。

变量“google”引用的对象实际上只是一个普通对象。标识符“google”只是一个变量名。
instanceof
操作符告诉我们对象来自何处,而不是什么变量恰好引用它。

来自:

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

因此,除非使用唯一构造函数创建对象,否则如下所示:

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

其中
newWay instanceof Way===true
,您不能使用instanceof告诉您它是一个对象以外的任何事情。

我更新了我的问题,我们在函数中调用方法的位置。。。在这种情况下,即使在您的更新中,您仍然有一个普通对象。它没有什么独特之处。@Mathletics:那很好,但是我怎么能区分这两个呢……你需要使用以下模式构造你的对象:function Way(){}var newWay=newWay()你是在问“我如何区分这两个?”或者您是在告诉我您已经可以了?您更新的问题的答案是您无法知道传递给函数的对象引用是由调用上下文中的变量引用的。JavaScript运行时根本看不到这些信息。。。。。为什么会这样?为什么没有一个唯一的构造函数它就不能。。。对象文字是指什么…@Kevin对象文字只是一个包含键值对的
新对象()。所有
对象
都只是
对象
。为什么在后一种情况下,如果所有对象都是对象,除非我构造它,否则它不起作用。
instanceof
的目的是告诉您何时有特定类型对象的实例,唯一的方法是拥有一个对象(而不是
对象
)它有自己的
原型
.var newWay={}google.makeBeer.call(newWay,'pepsi','coke');虽然newWay是一个对象,但它不起作用,但newWay=newnewway()起作用
var newWay = new Way(); // assuming you have defined an object Way