Javascript 方法链接定义

Javascript method chaining definition

在Javascript中使用方法链有什么区别 我知道这可能有一些奇怪的怪癖,所以我不确定:

var Kitten = function() {
  this.name = 'Garfield';
  this.color = 'brown';
  this.gender = 'male';
};

Kitten.prototype.setName = function(name) {
  this.name = name;
  return this;
};

Kitten.prototype.setColor = function(color) {
  this.color = color;
  return this;
};

var obj = new Kitten().setName("tom").setColor("red");

var Kitten = function() {
  this.name = 'Garfield';
  this.color = 'brown';
  this.gender = 'male';
  this.setColor = function(color) {
     this.color = color;
     return this;
  };
  this.setName = function(name) {
     this.name = name;
     return this;
  };

};

var obj = new Kitten().setName("tom").setColor("red");

没有区别。

当您在对象中使用 this 时,您是在将值放入对象中。

您自动将名称 属性 添加到 Kitten 对象中:

var Kitten = function() {
    this.name = 'Garfield';
}

您从外部显式地将名称添加到 Kitten 原型中:

 var Kitten = function() {
 }

 Kitten.prototype.name = "Garfield";

当您使用 new Kitten() 时,对象之间共享原型,并且将重新创建使用 this 在函数内部创建的内容。

调用代码的结果是一样的,不同的实现是这样的:

当您在实例化函数中调用函数时,每次创建 new 对象时都会创建它们。当它们在原型上创建时,这些函数将在所有实例之间共享。

两者各有优缺点 - 您可以使用内部函数创建类似 "private" 成员变量的东西,您可能会在其他语言中看到它,并实现 JavaScript 中广泛使用的模块模式开发人员,但如果您要创建大量对象,那么共享原型函数可以提高内存效率。现在人们不太关心内存效率,但如果你的目标是移动平台,它可能是相关的。

我更喜欢使用原型,因为在我看来它似乎更自然地随着语言的流动而发展,但是 - 就像所有严肃的 JavaScript 开发一样 - 它确实意味着有时你最终会感到困惑范围场景。