引言:出現兩次或者兩次以上的**,就需要封裝。
先給出一張**釋一下建構函式和原型物件還有例項之間的關係。
方式一:工廠模式
缺點:1.物件不能細分function
sayname
()function
createstudent
(id,name)
var stu1 = createstudent(....);//省略引數
var stu2 = .....;
stu1.sayname == stu2.sayname;//返回false-->此處就為乙個缺點(應該為true)
2.函式沒有完全封裝
方式二:建構函式模式
模擬內建建構函式,自定義物件型別的屬性和方法
*prototype:存放所有例項共享的屬性和方法var arr = new
array();
array.prototype.push = function
()arr.push();
缺點:1.每個方法都需要在每個例項上重新建立一遍function
student
(id,name)
var s1 = student(....);//省略引數 this-->window
var s2 = new student(....);//省略引數 this-->student例項
}
2.全域性宣告函式,這樣函式過多,封裝不完美
方式三:原型模式(修復函式宣告過多)
每個函式都有乙個屬性:prototype,這個屬性是乙個指標,指向乙個物件,該物件的用途是包含可以由特定型別的所有例項共享的屬性和方法。
每個函式物件都有乙個constructor屬性指向當前物件的建構函式
每個建構函式的例項在建立時會先給物件乙個[[__prototype__]],例項內部用來指向原型物件。
constructor:改變當前物件所指向的建構函式
將函式集中在一起 student.prototype =function
student
(id,name)
student.prototype.sayname = function
()var stu1 = new student(....);//省略引數
stu1.sayname();//呼叫即可
相當於新建object sayname:function()
舉例說明:
窮人想要繼承富人的錢和掙錢的方法
總結方法:子類的原型指向父類的例項function
rich
(name,age,gender)
rich.prototype.makemoney = function
()rich.prototype.money = ['card1','card2'];
function
poor
(name,age,gender,id)
poor.prototype = new rich();
poor.prototype.constructor = poor;
var p1 = new poor(...);//省略引數
console.log(p1);
p1.makemoney();//可呼叫,繼承成功
OC 對封裝 繼承 多型的理解
理解封裝 將物件的狀態資訊隱藏在物件內部,不允許外部程式直接訪問物件內部資訊,而是通過該類所提供的方法來實現對內部資訊的操作和訪問。對乙個類或物件實現良好的封裝,可以實現以下目的 訪問控制符 objective c提供了4個訪問控制符 private package protected 和 publ...
對繼承的理解。
我的發帖。我的體會 0 在做前端的時候發現乙個繼承的適合場景,就是母模板和子頁面的關係。用繼承比組合恰當。1 繼承的根本目的是為了對要解決的問題進行更好的建模 2 繼承的目的不是復用,從某種意義上來說,恰恰是為了處理不能復用的場景。所以才有繼承。復用只是大多數優秀模型的乙個必然結果而已。3 從底層實...
JS繼承的理解
function person name person.prototype.getname function function young age young.prototype newperson let young newyoung 22 控制台測試列印結果 將父類的例項作為子類的原型,這樣子類...