function b(){
this.var = 20;
ele = 10;
}
let a = new b()
因为我看不到ele或this.var都存储在b.prototype构造函数中。
答案 0 :(得分:2)
如果要在原型上存储属性,只需通过“原型”添加它
function b(){
this.var = 20;
}
b.prototype.ele = 10;
let a = new b();
您将能够通过创建的实例“ a”直接访问它
a.ele //will return 10
请记住,原型是单个对象,因此,使用相同构造函数创建的每个实例都将链接到单个原型。
每个实例都有自己的作用域,但共享一个原型。从性能角度来看很重要。
答案 1 :(得分:2)
在使用Javascript声明变量时,您必须格外小心。您当前的代码会创建一个全局变量ele
(将其添加为window对象的属性),因为您尚未使用var
,let
等进行声明。
例如:
function b() {
this.var = 20;
ele = 10;
}
let a = new b()
console.log("ele is visible outside: ", ele)
console.log("ele is same as window.ele: ", ele === window.ele)
您对主要问题的回答是:否,实例变量未存储在函数原型中。调用new b()
将创建一个新对象,该对象具有您使用this
分配的属性。该对象通过原型继承链接到函数的原型:
function b() {
this.var = 20;
}
let a = new b()
console.log("b.prototype.var?", b.prototype.var)
console.log("a.var?", a.var)
由于原型链接,如果您为b
的原型分配了某些东西,则b
的实例将可用(只要它们不具有自己的相同属性)。
function b() {
this.var = 20;
}
b.prototype.testArray = [1, 2, 3]
let a = new b()
let c = new b()
console.log(a.test, c.test)
console.log("They point to the same object?", a.test === c.test)