javascript中关键字"new"的含义

use*_*120 8 javascript object

我在javascript中阅读了关于"new"关键字的主题(JavaScript 中的'new'关键字是什么?).但是,我还在迷雾中; 我们来谈谈这个例子:

var foo = function() {
    return {
        setA: function(a) {
            this.a = a;
        },
        readA: function() {
            console.log(this.a);
        }
    };
};
Run Code Online (Sandbox Code Playgroud)

现在关于这两段代码是什么:

一:

var bob1 = foo();
bob1.setA(10);
bob1.readA();
Run Code Online (Sandbox Code Playgroud)

二:

var bob2 = new foo();
bob2.setA(10);
bob2.readA();
Run Code Online (Sandbox Code Playgroud)

在我的水平上,我看不出任何差异.那么使用关键字"new"有什么好处呢?

Fiz*_*han 4

如果你的函数直接返回对象,那么你不需要new运算符。键new的作用远不止这些。

可以说

function Animal(kind, name) {
   this.kind = kind;
   this.name = name;
}

Animal.prototype.walk = function() {
    console.log('Walking');
}
Run Code Online (Sandbox Code Playgroud)

那么你正在做

 var animal = new Animal();
Run Code Online (Sandbox Code Playgroud)

Javascript引擎将做以下事情

  var o = Object.create(Animal.prototype)
  Animal.apply(o, arguments);
  return o;
Run Code Online (Sandbox Code Playgroud)

Object.createprototype将进行函数对象的原型继承Animal。所以animal对象将有自己的属性和继承的属性。