物件導向複習

2021-09-24 08:21:36 字數 4282 閱讀 1816

function

class1()

複製**

class

class2()

}複製**

function

teacher()

teacher.prototype.beat = '打學生'

function

student()

var s1 = new student()

console.log(s1)

//student

console.log(s1.beat) <-

//undefined

複製**

原理:通過改變父類建構函式this的指向,使其指向子類的例項缺點:無法繼承父類原型上的方法和屬性,只能繼承父類建構函式上的方法屬性

function

teacher2()

teacher2.prototype.beat = '打學生'

function

student2()

student2.prototype = new teacher2() <-

teacher2.prototype.say() = function()

var s2 = new student2()

console.log(s2)

//student2

// -type: "學生"

// -__proto__: teacher2

// -title: "老師"

// -__proto__:

// -beat: "打學生"

// -constructor: ƒ teacher2()

// -__proto__: object

console.log(s2.beat)

// 打學生

s2.say()

// 666

複製**

原理:子類的原型引用了父類的例項,此時js會順著原型鏈在子類例項->子類原型 === 父類例項->父類原型中依次尋找方法屬性

能通過instanceof

給原型新增方法的語句一定要放在原型指向了父類例項之後

var s3 = new student2()

var s4 = new student2()

s3.title = '老師76'

console.log(s3.title) //老師76

console.log(s4.title) //老師

s3.__proto__.title = '老師76'

console.log(s3.title) // 老師76 <-

console.log(s4.title) // 老師76 <-

s3.type = '畢業了的學生'

console.log(s3.type) //畢業了的學生

console.log(s4.type) //學生

s3.array1.push('abc')

console.log(s3.array1) // [1, 2, 3, "abc"] <-

console.log(s4.array1) // [1, 2, 3, "abc"] <-

s3.array2.push('def')

console.log(s3.array2) // [7, 8, 9, "def"]

console.log(s4.array2) // [7, 8, 9,]

//罪魁禍首:

s3.__proto__ === s4.__proto__ // true

複製**

記住js順著原型鏈往上尋找方法和屬性,先在子類例項中(由子類建構函式獲得的屬性方法)找,再去子類的原型(已經指向了父類例項)中找......同時父類例項又有自己的__proto__...真是繞.....

缺點:子類的例項共享同乙個原型,修改乙個子類的屬性另乙個也會改變

function

teacher3()

function

student3()

student3.prototype = new teacher3() <-

var s5 = new student3()

var s6 = new student3()

s5.array3.push(4)

console.log(s5.array3) // [1,2,3,4]

console.log(s6.array3) // [1,2,3]

複製**

缺點,例項化了三次

優化版本1
function

teacher4 ()

function

student4 ()

student4.prototype = teacher4.prototype // <-

var s7 = new student4()

var s8 = new student4()

s7.array3.push(4)

console.log(s7.array3) // [1,2,3,4]

console.log(s8.array3) // [1,2,3]

複製**

只在例項化的時候才例項類

__上述兩種共同的缺點:最終產生的例項的建構函式都會指向父類建構函式

原因:student4.prototype = teacher4.prototype或者student3.prototype = new teacher3()__

s5.constructor = function

teacher3()

s7.constructor = function

teacher4()

複製**

優化版本2
function

teacher5 ()

function

student5 ()

student5.prototype = object.create(teacher5.prototype) // <-

// object.creat() 創造的中間物件的原型物件就是傳入的引數

// 此時中間物件的原型也就是父類的原型

// 中間物件通過類似在原型鏈上「加一段」的方式把父子類的構造器隔開

var s9 = new student5()

console.log(s9.constructor) //依然為父類構造器

複製**

最終版本
function

teacher6 ()

function

student6 ()

student6.prototype = object.create(teacher6.prototype) // <-

student6.prototype.constructor = student6 // <-!!!!!

var s10 = new student6()

console.log(s10 instanceof teacher6,s10 instanceof student6)

// true true

console.log(s10.constructor) // student5 ()

複製**

kill it!

java物件導向複習

1 記憶體 pc主要原件 cpu 記憶體 硬碟 執行著的程式在記憶體裡,記憶體是臨時儲存器。沒有執行的程式在硬碟上,硬碟是永久性儲存器。2 和資料庫無關的程式都是只在記憶體裡執行,屬於曇花一現。寫程式的實質就是在操作記憶體。int a 10 和記憶體要一塊空間,名字叫 a,大小 4個位元組,把 10...

物件導向複習5 1

1.構造器通常的形式為假定有類為person,則構造器建立物件為person p new person new呼叫構造器建立物件person並賦值給乙個person變數p。這裡可以看出構造器是乙個和類同名的方法,構造器的作用就是為類建立物件。2.static 只需要記得static修飾的成員變數屬於...

物件導向的複習

物件導向通過函式 封裝得到乙個類,備註 類的本質還是函式 1 每個類 函式 天生有乙個 prototype 的屬性,這個 prototype 又是乙個物件,這個物件裡面有個 construction 建構函式 的屬性,屬性值是類本身。2 我們所有 new 乙個類的時候,其實是呼叫它的建構函式。建構函...