我试图理解为什么this和prototype在构造函数与新实例中的行为不同。在下面的代码中,Aircraft.range返回undefined。我无法理解为什么它不像新实例那样返回2,000。
function Aircraft() {
this.range = '2,000 Km';
}
let mustang = new Aircraft();
console.log('Aircraft.range ', Aircraft.range);
console.log('mustang.range ', mustang.range);

使用原型的这种尝试产生了相同的结果。
function Aircraft() {}
Aircraft.prototype.range = '2,000 Km';
let mustang = new Aircraft();
console.log(Aircraft.range);
console.log(mustang.range);

****更新****
我读过很多关于原型和实例的文章,但理论只是到目前为止。这是一个特定的问题,用于解决这些想法的机制。我收到的答案比十几篇谈论理论的文章更能理解这个概念。我确信这些答案可以帮助其他人尝试学习Javascript的基础知识。
答案 0 :(得分:3)
以下是对这三种情况的简单解释:
range
表示Aircraft.prototype.range
仅是所创建实例的属性。range
表示Aircraft.range
是您创建的所有实例的属性,因为它是在构造函数的原型中定义的。range
表示this.constructor.range
是构造函数的属性(因为函数是对象)并且与实例无关。实例只能使用10.0.2.2:3000
。答案 1 :(得分:1)
真正帮助我理解这一点的是确切了解new
关键字的作用。
new Aircraft
表示:
{}
")Aircraft
对象调用this
函数(将该对象设置为.range
为"2,000 Km"
Aircraft.prototype
你可以这样自己实现:
function _new ( constructor ) {
var instance = {};
constructor.call( instance );
instance.prototype = constructor.prototype;
return instance;
}
_new( Aircraft )
大致相当于new Aircraft()
。