Javascript方法链接定义

Javascript method chaining definition

本文关键字:定义 链接 方法 Javascript      更新时间:2023-10-10

在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");

在调用代码方面的结果是相同的,实现之间的区别是:

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

两者都有优点和缺点-你可以使用内部函数来创建一些你可能在其他语言中看到的"私有"成员变量,并实现在JavaScript开发人员中广泛使用的模块模式,但如果你要创建很多对象,那么共享原型函数可以提高内存效率。现在人们不怎么考虑内存效率,但如果你的目标是移动平台,这可能是相关的。

我更喜欢使用原型,因为在我看来,它似乎更自然地适应了语言的流程,但就像所有严肃的JavaScript开发一样,这确实意味着有时你会陷入令人困惑的范围界定场景。

没有区别。

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

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

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

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

 var Kitten = function() {
 }
 Kitten.prototype.name = "Garfield";

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