js 栈指针 堆内存 典型题目

let A = function() {}
A.prototype.a = 1; 
//此时 A.prototype = { a: 1 }


let B = new A(); //此时 B = {}
//在创建B时,已将B._proto_ = A.prototype = { a: 1 }
//即使后面A.prototype重新赋值,将A.prototype开辟了新的空间指向别的对象
//B._proto_并没有改,还是指向{a:1}这个对象


A.prototype = { //此时 A.prototype = { b: 2, c: 3 }
  b: 2,
  c: 3
}
let C = new A(); //C = {}
A.prototype.d = 4;//此时A.prototype = { b: 2, c: 3, d: 4 }

console.log(B.a); //1
console.log(B.b); //undefined
console.log(C.c); //3
console.log(C.d); //4

//C.d
//着重区分: A.prototype.d = 4 和 A.prototype 重新赋值 不是一个概念 
//A.prototype重新赋值时,A.prototype已经指向另一个对象了   
//A.prototype.d = 4时,访问的还是同一个A.prototype 对象 

在创建B时,已将B.proto = A.prototype; 后面A.prototype重新赋值,只是将A.prototype开辟了新的空间,B._proto_并没有改,还是{a:1};

如果 let B = new A(); 之后
加一个 A.prototype.b = 999;
那么 console.log(B.b); B.b就是999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值