新的和 instanceof Javascript
new and instanceof Javascript
嗨,我是 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:Now而不是返回对象文字我什么都不做,
var Dog=function(){
};
var luna=Dog();
luna instanceof Dog
false
var luna=new Dog();
luna instanceof Dog;//why true here
true
var luna=Dog();
luna instanceof Dog;//why false here
因为你:
- 没有使用
new
运算符
- 返回了一个简单的对象
var luna=new Dog();
luna instanceof Dog;//why false here
因为您 return 编辑了一个简单的对象,该对象 覆盖了 由 new
运算符创建的对象。
var luna=new Dog();
luna instanceof Dog;//why true here
因为你:
- 是否使用了
new
运算符
- 没有覆盖 return 值
案例一:
var Dog=function(){
return{legs:4,bark:alert("BOW!!")};};
var luna=Dog();
luna instanceof Dog;
false
在这里你没有实例化任何东西,它只是一个函数,return是一个值:一个普通的对象。这或多或少相当于 :
var Dog=function(){
return new Object();
}
returned 值的构造函数是对象:luna.constructor
是 Object()
函数。
var luna=Dog();
luna instanceof Dog;
false
var luna=new Dog();
luna instanceof Dog;
false
您不能实例化 return 某物
的函数
案例二:
var Dog=function(){
};
var luna=Dog();
它被称为一个函数,一个不return任何东西的函数,实际上它returns 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 运算符用于指定函数应该做什么:没有它它 returns 东西(或 undefined
),它从构造函数实例化一个新对象(这里 Dog
)
使用 function
关键字来创建 classes 可能会造成混淆。当您在不使用 new
关键字的情况下调用 Dog()
时,您只是在调用一个函数; class不涉及。
在情况 1 中,第一个 luna
只是 Dog
作为普通函数调用时的结果:{legs:4, bark: alert("BOW!!")}
与 Dog
无关,因为一个class。第二个luna
也是如此。由于 Dog
returns 一个对象,它会覆盖通常使用 new
.
创建的 "class" 实例
在案例 2 中,第一个 luna
就像案例 1 中的第一个 luna
,一个普通对象。但是第二个 luna
是 Dog
的实例,因为使用了 new
关键字,这意味着 Dog
被视为 class 而不是函数,并且Dog
.
没有返回任何内容
(另外,您应该将对象更改为 {legs: 4, bark: function() { alert("BOW!!"); }}
。)
嗨,我是 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:Now而不是返回对象文字我什么都不做,
var Dog=function(){
};
var luna=Dog();
luna instanceof Dog
false
var luna=new Dog();
luna instanceof Dog;//why true here
true
var luna=Dog(); luna instanceof Dog;//why false here
因为你:
- 没有使用
new
运算符 - 返回了一个简单的对象
var luna=new Dog(); luna instanceof Dog;//why false here
因为您 return 编辑了一个简单的对象,该对象 覆盖了 由 new
运算符创建的对象。
var luna=new Dog(); luna instanceof Dog;//why true here
因为你:
- 是否使用了
new
运算符 - 没有覆盖 return 值
案例一:
var Dog=function(){
return{legs:4,bark:alert("BOW!!")};};
var luna=Dog();
luna instanceof Dog;
false
在这里你没有实例化任何东西,它只是一个函数,return是一个值:一个普通的对象。这或多或少相当于 :
var Dog=function(){
return new Object();
}
returned 值的构造函数是对象:luna.constructor
是 Object()
函数。
var luna=Dog();
luna instanceof Dog;
false
var luna=new Dog();
luna instanceof Dog;
false
您不能实例化 return 某物
的函数案例二:
var Dog=function(){
};
var luna=Dog();
它被称为一个函数,一个不return任何东西的函数,实际上它returns 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 运算符用于指定函数应该做什么:没有它它 returns 东西(或 undefined
),它从构造函数实例化一个新对象(这里 Dog
)
使用 function
关键字来创建 classes 可能会造成混淆。当您在不使用 new
关键字的情况下调用 Dog()
时,您只是在调用一个函数; class不涉及。
在情况 1 中,第一个 luna
只是 Dog
作为普通函数调用时的结果:{legs:4, bark: alert("BOW!!")}
与 Dog
无关,因为一个class。第二个luna
也是如此。由于 Dog
returns 一个对象,它会覆盖通常使用 new
.
在案例 2 中,第一个 luna
就像案例 1 中的第一个 luna
,一个普通对象。但是第二个 luna
是 Dog
的实例,因为使用了 new
关键字,这意味着 Dog
被视为 class 而不是函数,并且Dog
.
(另外,您应该将对象更改为 {legs: 4, bark: function() { alert("BOW!!"); }}
。)