鍍金池/ 問答/Python  HTML/ javascript 對象和原型的一點問題

javascript 對象和原型的一點問題

本人菜鳥, 最近在學(xué)習(xí)javascript的時候遇到了一點問題, 如下:

var Student = function(name, height) {
    this.name = name
    this.height = height
}
Student.prototype.greeting = function() {
    console.log(`hello, I'm ${this.name}`)
}

var s1 = new Student('小明', 169)

Student.prototype.update = function(name, age) {
    this.name = name
    this.age = age
}

s1.greeting() // hello, I'm 小明

s1.update('小紅', 170)
s1.greeting() // hello, I'm 小紅

疑惑在于當(dāng)我給原型對象增加了一個新的屬性update()并調(diào)用他的時候, 為什么實例對象 s1的屬性也被更新了, 不是非常理解, 這個update()是不是一個新的構(gòu)造函數(shù)?

如能解答, 不勝感激

回答
編輯回答
孤客

圖片描述

2017年9月29日 03:30
編輯回答
尛曖昧

Student.prototype是 s1實例的原型
執(zhí)行s1.update()的時候,s1實例不存在這個方法,往原型上找,找到了就執(zhí)行
執(zhí)行的時候,this是指的的是調(diào)用update方法的對象,這個對象是s1 ,所以更新了name和height

2017年4月22日 04:39
編輯回答
瘋子范

我舉個例子,不知你能不能理解:
jQuery你應(yīng)該知道吧?當(dāng)我們基于jQuery去開發(fā)插件的時候,也是在其原型上添加方法或者修改其原有的方法,當(dāng)我們在下面或者引用了jQuery的方法的地方打印,都會看到你添加到原型上的東西,也就是說,你上面的s1指向的是一個地址指針,也就是一個引用地址,其內(nèi)容并不是new一個對象之后一層不變的,當(dāng)繼續(xù)給Student添加原型對象時,其實是給s1指向的那個指針地址添加了東西,s1并沒有改變什么,還是指向那里,當(dāng)s1被調(diào)用時才隨著指針地址去找對應(yīng)的對象函數(shù),調(diào)用其屬性或者方法

這說的把我自己都說蒙了,確實有些許難理解,不知道咋表達,有些只可意會不可言傳的味道
2017年9月30日 20:31