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