基於內建類原型擴充套件方法
以一道題為例,剖析原型與原型鏈的底層機制:
呼叫當前例項物件的某個屬性(成員訪問),先看是否是自己的私有屬性,如果是則返回私有屬性的值;如果不是則沿著原型鏈__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...