js物件導向高階

2022-02-16 05:27:49 字數 1385 閱讀 2168

function student(name, age) 

}var stu1 = new student('張三', 18);

像這樣需要通過new來使用的函式都可以稱為建構函式

通過this寫進去的,是它的例項方法,可以通過new來呼叫

student.nation = "china";
向這樣直接新增進去的是靜態成員,只能通過建構函式名來呼叫

像上面新增有乙個弊端,就是需要執行相同操作的時候,new出來佔了不同的空間,也就是浪費記憶體,解決辦法是通過js中的原型機制(可以理解為共享的),解決掉

先來了解下函式

普通方法新增到函式內部,佔不同空間,通過this訪問

共享方法新增到函式原型,通過prototype訪問,

new出來的例項物件想訪問函式原型,通過__proto__屬性

想訪問建構函式,通過constructor來訪問

原型鏈就是一直向上訪問,頂層是object

如果在object原型新增方法,那麼所有物件都能訪問

function father(name, age) 

father.prototype.getmoney = function ()

function son(name, age) (誰new this指向誰)

father.call(this, name, age)

}// 方法繼承

son.prototype = new father();

son.prototype.constructor = son;

// 兒子自己的方法

son.prototype.study = function ()

/*1 call() 可以實現函式呼叫

fun.call();

2 可以改變函式中this指向

fun.call(obj,10,20);

*/var zs = new son('張三', 18);

console.log(zs.name, zs.age);

zs.getmoney();

zs.study();

繼承需要改變this指向,這樣可以達到屬性繼承,方法繼承通過改變原型,在新增子類方法,最終實現偽繼承

class fa 

getmoney()

}class son extends fa

}var son1 = new son("小明", 18);

son1.getmoney();

es6通過語法糖形式,本質上還是通過上面的方法實現,只是寫法更簡便,需要注意子類必須呼叫一次super方法,才能讓原型繼承父類屬性

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...

物件導向高階

public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...

物件導向高階

私有屬性,不能被子類繼承,在屬性的前面加上 就變為了私有屬性 私有方法,不能被子類繼承,在方法的前面加上 就變為了私有方法 只在前面加,後面不加,一般前後都有 的,屬於類當中自帶的方法或屬性 class class test1 str1 a 私有屬性 def init self pass def m...