今天腦袋短路,有種有這麼一種問題困擾我:
let computer = function這個問題問的真愚蠢!但是卻讓我醒悟,長時間的使用框架與類庫,導致js的一些思想完全忘記了。() ;
computer.prototype.fun = function
() ;
let mac = new
computer();
mac.fun = 1;
let acer = new
computer();
console.log(acer.fun);
//為什麼acer的fun不是1
從圖中可以看出mac與acer都是computer類的例項,當執行 mac.fun=1時實質上是在mac物件上新增乙個fun屬性。
暫時下結論:例項無法修改原型鏈上的方法,只能繼承使用(作用域鏈採取就近原則)先提示一下這個結論是錯誤的,看下面的例子:
function從上面可以看,執行 male.books.push('php') 時, female.books也被改變了,這是為什麼呢?下面上圖:human()
human.prototype.books = ['css', 'js', 'html'];
var male = new
human();
var female = new
human();
male.books.push('php');
console.log(female.books);
//['css', 'js', 'html', 'php'];
看出貓膩了麼? 執行 male.books.push('php') 實際上是直接操作原型物件上的books屬性,這個操作並沒有為male新增books屬性。所以訪問female.books也就是原型物件上的books。
總結:在操作例項物件instance的原型屬性property時,如果你使用instance.property= express,相當於給例項本身新增加乙個property屬性,並沒有改變原型物件的property的屬性。如果你沒有使用=進行輔助而是改變instance.property的值,那麼相當於你改變了原型物件的property屬性值。
所以原型物件上一般存放方法,修改方法是通常是使用 = 進行賦值,這樣就不會改變原型物件了。
JS物件導向程式設計 物件
一般面向過程的寫法都是寫很多function,壞處 1.復用不好 2.函式名稱容易重複衝突 下面介紹物件導向的寫法 在js中每個函式function都是乙個物件。比如,下面這個就是乙個物件,我們在使用的時候就可以當作物件來使用。function helloworld 使用下面測試函式 呼叫該函式就會...
js物件導向程式設計
js物件導向程式設計 js使用建構函式作為物件的模板 var vehicle function 生成物件例項 var v new vehicle v.price 1000 傳引數的建構函式 var vehicle function value var v new vehicle 500 protot...
js物件導向程式設計
1.直接建立物件 集中例項化問題 2.工廠模式 物件識別問題 3.建構函式模式 例項化物件的方法在每個例項上都要建立一遍 建構函式模式 function student name var student1 new student 張三 每個例項物件對應乙個引用,所以例項化物件時,所有屬性與方法都會重...