JS物件導向程式設計的實現

2022-02-24 21:32:47 字數 1349 閱讀 2241

今天腦袋短路,有種有這麼一種問題困擾我:

let computer = function

() ;

computer.prototype.fun = function

() ;

let mac = new

computer();

mac.fun = 1;

let acer = new

computer();

console.log(acer.fun);

//為什麼acer的fun不是1

這個問題問的真愚蠢!但是卻讓我醒悟,長時間的使用框架與類庫,導致js的一些思想完全忘記了。

從圖中可以看出mac與acer都是computer類的例項,當執行 mac.fun=1時實質上是在mac物件上新增乙個fun屬性。

暫時下結論:例項無法修改原型鏈上的方法,只能繼承使用(作用域鏈採取就近原則)先提示一下這個結論是錯誤的,看下面的例子:

function

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') 時, female.books也被改變了,這是為什麼呢?下面上圖:

看出貓膩了麼? 執行 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 張三 每個例項物件對應乙個引用,所以例項化物件時,所有屬性與方法都會重...