构造函数

通常情况下需要对象拥有相同或者相似的状态结构(也就是相同的属性集合),赋以不同的状态值。在这个情况下我们可能需要使用构造函数(constructor function),其以指定的模式来创造对象。

除了以指定模式创建对象之外,构造函数也做了另一个有用的事情-它自动地为新创建的对象设置一个原型对象。这个原型对象存储在ConstructorFunction.prototype属性中。

换句话说,我们可以使用构造函数来重写上一个拥有对象b和对象c的例子。因此,对象a(一个原型对象)的角色由Foo.prototype来扮演:

//构造函数Foo(注意不是foo)
function Foo(y) {
  this.y = y;
//自动创建了一个prototype属性,值为Foo.prototype
//自带__proto__属性,值为Function.prototype(自带__proto__属性,值为Object.prototype<...>)
}

// 定义Foo.prototype内有个x属性,值为10
Foo.prototype.x = 10;

// 定义Foo.prototype内有个calculate方法
Foo.prototype.calculate = function (z) {
  return this.x + this.y + z;
};

// 基于Foo创建b,c
var b = new Foo(20);
var c = new Foo(30);

// 调用继承来的calculate方法
b.calculate(30); // 60
c.calculate(40); // 80

console.log(

  b.__proto__ === Foo.prototype, // true
  c.__proto__ === Foo.prototype, // true

  b.constructor === Foo, // true
  c.constructor === Foo, // true
  Foo.prototype.constructor === Foo // true

  b.calculate === b.__proto__.calculate, // true
  b.__proto__.calculate === Foo.prototype.calculate // true

);

Paste_Image.png


幸运儿
916 声望139 粉丝

引用和评论

0 条评论