首页 > 解决方案 > 以下语句的函数将存储在该函数的原型中的位置

问题描述

   function b(){
     this.var = 20;
     ele = 10;
   }
   let a = new b()

因为我看不到 ele 和 this.var 都没有存储在 b.prototype 构造函数中。

标签: javascriptprototype

解决方案


在 Javascript 中声明变量时必须小心谨慎。您当前的代码创建了一个全局变量ele(它作为 window 对象的属性添加),因为您没有使用 等声明varlet

例如:

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)


推荐阅读