Javascript方法链接定义

Javascript方法链接定义,javascript,prototype,Javascript,Prototype,在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

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

})

没有区别

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

自动将name属性添加到Kitten对象中:

var Kitten = function() {
    this.name = 'Garfield';
}
您可以从外部将名称显式添加到Kitten原型中:

 var Kitten = function() {
 }

 Kitten.prototype.name = "Garfield";

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

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

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

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


我更喜欢使用原型,因为我觉得它更符合语言的流程,但是——就像所有严肃的JavaScript开发一样——它确实意味着有时你会遇到令人困惑的范围界定场景。

在第二个版本中,所有小猫都将携带自己的
setColor
setName
功能副本。在前者中,他们将共享原型中的定义。所以,如果您不打算对不同的小猫有不同的定义,那么第一个更好
var Kitten = function() {
    this.name = 'Garfield';
}
 var Kitten = function() {
 }

 Kitten.prototype.name = "Garfield";