對JS中的繼承和封裝的理解

2021-08-18 04:57:59 字數 1945 閱讀 2881

引言:出現兩次或者兩次以上的**,就需要封裝。

先給出一張**釋一下建構函式和原型物件還有例項之間的關係。

方式一:工廠模式

function

sayname

()function

createstudent

(id,name)

var stu1 = createstudent(....);//省略引數

var stu2 = .....;

stu1.sayname == stu2.sayname;//返回false-->此處就為乙個缺點(應該為true)

缺點:1.物件不能細分

2.函式沒有完全封裝

方式二:建構函式模式

模擬內建建構函式,自定義物件型別的屬性和方法

var arr = new

array();

array.prototype.push = function

()arr.push();

*prototype:存放所有例項共享的屬性和方法

function

student

(id,name)

var s1 = student(....);//省略引數 this-->window

var s2 = new student(....);//省略引數 this-->student例項

}

缺點:1.每個方法都需要在每個例項上重新建立一遍

2.全域性宣告函式,這樣函式過多,封裝不完美

方式三:原型模式(修復函式宣告過多)

每個函式都有乙個屬性:prototype,這個屬性是乙個指標,指向乙個物件,該物件的用途是包含可以由特定型別的所有例項共享的屬性和方法。

每個函式物件都有乙個constructor屬性指向當前物件的建構函式

每個建構函式的例項在建立時會先給物件乙個[[__prototype__]],例項內部用來指向原型物件。

constructor:改變當前物件所指向的建構函式

function

student

(id,name)

student.prototype.sayname = function

()var stu1 = new student(....);//省略引數

stu1.sayname();//呼叫即可

將函式集中在一起 student.prototype =

相當於新建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 控制台測試列印結果 將父類的例項作為子類的原型,這樣子類...