修改studnet.prototype整個(gè),為什么不影響已經(jīng)new了的實(shí)例?
”studnet.prototype.x這里如果只是動(dòng)態(tài)的修改studnet.prototype上面會(huì)被動(dòng)態(tài)的修改,但是如果一整個(gè)studnet.prototype都全部修改的話,并不會(huì)影響已經(jīng)new了的實(shí)例”
不懂為啥會(huì)不影響?感覺(jué)老師講的不是很明白。。。。不知道是不是我理解問(wèn)題,請(qǐng)教下!
2016-09-04
可以這樣理解:bosn.__proto__和student.prototype都是引用,在創(chuàng)建bosn的時(shí)候,bosn.__proto__指向了student.prototype指向的對(duì)象,之后你修改student.prototype指向的對(duì)象,是不會(huì)影響bosn.__proto__指向的對(duì)象的
2019-09-28
因?yàn)樵趎ew一個(gè)Student類型的bosn對(duì)象實(shí)例時(shí),會(huì)將Student.prototype的值賦值給bosn._proto_,而Student.prototype的值是它所指向的那個(gè)對(duì)象的地址(對(duì)象本身存在堆內(nèi)存中),而[Student.prototype:對(duì)象地址]存在棧內(nèi)存中,當(dāng)通過(guò)Student.prototype.x修改對(duì)象時(shí),修改的是存在堆內(nèi)存的對(duì)象本身,因?yàn)閎osn._proto_存的是對(duì)象的地址,所以bosn(包括所以已創(chuàng)建或指向這個(gè)地址的對(duì)象)肯定也會(huì)跟著一起變啦。但當(dāng)你給Student.prototype賦予一個(gè)新對(duì)象的值時(shí),會(huì)在堆內(nèi)存新開辟一塊地址存放這個(gè)對(duì)象,并且將對(duì)象的地址傳給Student.prototype,所以原來(lái)的對(duì)象肯定不會(huì)跟著變啦,它們指向的都不是同一個(gè)對(duì)象。如果你能好好理解上邊這一段,你就會(huì)明白JavaScript的引用傳遞和深拷貝淺拷貝等問(wèn)題。
2016-09-24
在前面的例子中 變量a和變量b的內(nèi)存中保存的是個(gè)指針(即引用),也就是說(shuō)它們所指向同一個(gè)對(duì)象。所以修改a的屬性,會(huì)影響b的屬性。但是當(dāng) a = 10; ( 或者 a = { y: 5}; ) 變量a中保存的值為5(或者引用另一個(gè)對(duì)象{ y: 5}的地址),再修改屬性就不會(huì)影響變量b了。
2016-09-24
這是因?yàn)閖s的坑比特性,當(dāng)復(fù)制保存著對(duì)象的某個(gè)變量時(shí),操作的是對(duì)象的引用。但在為對(duì)象添加屬性時(shí),操作的是實(shí)際的對(duì)象。舉個(gè)例子:
這種特性僅僅限于引用類型,基本類型和其他語(yǔ)言一樣按照值傳遞。比如 a = 2 ; ? ?b = a; ? ? a = 3; ? ?console.lof(b); // 2
2016-08-27
可是 改prototype中的一些就會(huì)影響到,改全部就不會(huì)影響??偢杏X(jué)怪怪的。。
2016-08-26
舉個(gè)例子,一個(gè)女的生了個(gè)孩子,然后她去整容,只會(huì)影響她自己的樣子,不會(huì)影響自己孩子的樣子,這就是為啥new實(shí)例不會(huì)被修改。