原型prototype與原型鏈 proto

2021-10-06 03:20:20 字數 1196 閱讀 7632

基於內建類原型擴充套件方法

以一道題為例,剖析原型與原型鏈的底層機制:

呼叫當前例項物件的某個屬性(成員訪問),先看是否是自己的私有屬性,如果是則返回私有屬性的值;如果不是則沿著原型鏈__proto__向上查詢所屬類原型中的公有屬性/方法,……直到查詢到基類object的原型為止。

f1.__proto__.gety:跳過查詢私有的gety方法,直接查詢其所屬類原型上的方法。ie中不允許使用__proto__屬性。

f1.getx(): 涉及到this時,先確定執行的是哪個方法,誰呼叫的這個方法,方法中的this就是誰。

console.log(f1.hasownproperty("gety"));   // => false

console.log(fn.prototype.hasownproperty("gety")); // => true

console.log(gety in f1);   // => true

console.log(gety in fn.prototype); // => true

普通函式:

建構函式:無論加不加(),都是將函式執行,並返回乙個例項物件

瀏覽器內建的方法不一定能滿足所有需求。

方便例項呼叫。例項.方法 => 方法中的this: 該例項

let obj = 

for(let key in obj)

object.prototype.aaa = function aaa();

for(let key in obj)

如果希望忽略原型上的擴充套件方法 (可能有一些別人擴充套件到原型上的, 你並不想要),需要這麼寫:

for(let key in obj)

原型跟原型鏈 prototype跟proto

1.原型跟原型鏈 每個物件都有乙個原型物件,物件是以其為模板,從原型繼承方法和屬性。原型物件也有原型,並從中繼承方法跟屬性,一層一層,這種關係就是原型鏈。這些屬性跟方法是定義在object的建構函式的prototype屬性上的,而非物件例項本身。在傳統的物件導向語言中,是通過定義乙個類,此後建立物件...

原型與原型鏈

原型有兩種 1為顯示原型,2為隱式原型 1.顯示原型 a prototype b 每個函式都有乙個顯示原型prototype當然函式也有隱式原型 c 原型就是函式的乙個屬性,這個屬性名叫做prototype d 這個屬性即prototype的型別是object 2.隱式原型 a proto b 每個...

原型與原型鏈

圖中一共標了7條線,就一條一條的講,講完了就應該懂了 已知 1.函式是物件,原型也是物件 2.proto 每乙個物件都有,prototype是函式特有的 3.物件的 proto 屬性指向該物件建構函式的 原型 prototype 線1.物件f1的 proto 屬性指向其建構函式的原型 其建構函式 f...