对象如何继承构造函数属性?

时间:2017-04-19 15:27:20

标签: javascript constructor prototype

我无法理解构造函数用于创建新对象的方式。这是一些示例代码:

function Backpack(type) {
  this.type = type;
}

Backpack.log = function() {
  console.log('This is a ' + this.type + ' backpack.');
}

var smallBackpack = new Backpack('small');
console.log(smallBackpack.type);
//-> small

smallBackpack.log();
// TypeError: smallBackpack.log is not a function

我理解的是(如果我错了,请纠正我) Backpack 被用作构造函数并返回一个新对象。在这个例子中, Backpack smallBackpack 的原型,并包含如果它们未设置为 smallBackpack 将会查找的所有属性 EM>。那么为什么那个smallBackpack.log不存在。

function Backpack(type) {
  this.type = type;
}

Backpack.prototype.log = function() {
  console.log('This is a ' + this.type + ' backpack.');
}

var smallBackpack = new Backpack('small');
console.log(smallBackpack.type);
//-> small

smallBackpack.log();
//-> This is a small backpack.

在这个例子中,我发现如果我将 log 设置为 Backpack.prototype ,那么 smallBackpack 将获得该功能。我不明白为什么会这样,而不是第一个例子。

1 个答案:

答案 0 :(得分:0)

请理解新关键字的工作。它首先创建空对象然后连接起来"这个"到那个空对象,因此在你的情况下调用this.type是创建对象实例的属性。调用Backpack.log()不会在实例对象上创建任何方法。