您好我是Javascript的新手。我对新单词及其在决定instanceof运算符输出方面的作用感到困惑。
案例1.返回对象字面值
var Dog=function(){
return{legs:4,bark:alert("BOW!!")};};
var luna=Dog();
luna instanceof Dog;//why false here
false
var luna=new Dog();
luna instanceof Dog;//why false here
false
案例2:现在我没有做任何事情,而是返回对象文字,
var Dog=function(){
};
var luna=Dog();
luna instanceof Dog
false
var luna=new Dog();
luna instanceof Dog;//why true here
true
答案 0 :(得分:4)
var luna=Dog(); luna instanceof Dog;//why false here
因为你:
new
运营商var luna=new Dog(); luna instanceof Dog;//why false here
因为您返回了一个简单的对象 overrode new
运算符创建的对象。
var luna=new Dog(); luna instanceof Dog;//why true here
因为你:
new
运算符答案 1 :(得分:1)
案例1:
var Dog=function(){
return{legs:4,bark:alert("BOW!!")};};
var luna=Dog();
luna instanceof Dog;
false
这里你没有实例化任何东西,它只是一个返回值的函数:一个普通的Object。这或多或少相当于:
var Dog=function(){
return new Object();
}
返回值的构造函数是Object:luna.constructor
是Object()
函数。
var luna=Dog();
luna instanceof Dog;
false
var luna=new Dog();
luna instanceof Dog;
false
您无法实例化返回某些内容的函数
案例2:
var Dog=function(){
};
var luna=Dog();
它被称为一个函数,一个不返回任何东西的函数,实际上它返回undefined
luna instanceof Dog
false
因为undefined
不是任何实例
var luna=new Dog();
创建一个新的Object
,其中Dog为构造函数luna.constructor
为Dog()
luna instanceof Dog;//luna is an object here
true
new运算符用于指定函数应该做什么:没有它它返回一些东西(或undefined
),用它从构造函数实例化一个新对象(这里是Dog
)
答案 2 :(得分:1)
使用function
关键字创建类可能会造成混淆。当您使用Dog()
关键字呼叫new
时,您只需要调用一个函数;不涉及课程。
在案例1中,第一个luna
只是将Dog
作为普通函数调用时的结果:{legs:4, bark: alert("BOW!!")}
并且与Dog
作为一个类无关。第二个luna
也是如此。由于Dog
返回一个对象,它会覆盖"类"通常使用new
创建的实例。
在案例2中,第一个luna
就像案例1中的第一个luna
一样,是一个普通对象。但是第二个luna
是Dog
的一个实例,因为使用了new
关键字,这意味着Dog
被视为类而不是函数,并且没有任何内容返回Dog
。
(另外,您应该将对象更改为{legs: 4, bark: function() { alert("BOW!!"); }}
。)