我无法理解构造函数用于创建新对象的方式。这是一些示例代码:
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 将获得该功能。我不明白为什么会这样,而不是第一个例子。
答案 0 :(得分:0)
请理解新关键字的工作。它首先创建空对象然后连接起来"这个"到那个空对象,因此在你的情况下调用this.type是创建对象实例的属性。调用Backpack.log()不会在实例对象上创建任何方法。