新的和 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

因为你:

  1. 没有使用 new 运算符
  2. 返回了一个简单的对象
var luna=new Dog();
luna instanceof Dog;//why false here

因为您 return 编辑了一个简单的对象,该对象 覆盖了 new 运算符创建的对象。

var luna=new Dog();
luna instanceof Dog;//why true here

因为你:

  1. 是否使用了 new 运算符
  2. 没有覆盖 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.constructorObject() 函数。

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.constructorDog()

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,一个普通对象。但是第二个 lunaDog 的实例,因为使用了 new 关键字,这意味着 Dog 被视为 class 而不是函数,并且Dog.

没有返回任何内容

(另外,您应该将对象更改为 {legs: 4, bark: function() { alert("BOW!!"); }}。)