JS原型鏈模式

2022-09-18 17:09:12 字數 2403 閱讀 9041

例項識別:

建構函式模式中擁有了類和例項的概念,並且例項和例項之間是相互獨立開的

function createjsperson(name, age)

createjsperson.prototype.writejs = function()

基於建構函式模式的原型模式解決了,方法或者屬性共有的問題,想讓誰共有就把他放在createjsperson.prototype上即可

每乙個函式資料型別(普通函式,類)都有乙個天生自帶的屬性:prototype(原型),並且這個屬性是乙個物件資料型別的值

並且在prototype上瀏覽器天生給它加了乙個屬性constructor(建構函式),屬性值是當前函式(類)本身

每乙個物件資料型別(普通的物件,例項,prototype..)也天生自帶乙個屬性: _ _proto _ _,屬性值是當前例項所屬類的原型(prototype)

function fn()

fn.prototype.getx = function()

var f1 = new fn;

var f2 = new fn;

console.log(fn.prototype.constructor === fn); // true

console.log(f1 instanceof object); // true

例項識別:

建構函式模式中擁有了類和例項的概念,並且例項和例項之間是相互獨立開的

function createjsperson(name, age)

createjsperson.prototype.writejs = function()

基於建構函式模式的原型模式解決了,方法或者屬性共有的問題,想讓誰共有就把他放在createjsperson.prototype上即可

每乙個函式資料型別(普通函式,類)都有乙個天生自帶的屬性:prototype(原型),並且這個屬性是乙個物件資料型別的值

並且在prototype上瀏覽器天生給它加了乙個屬性constructor(建構函式),屬性值是當前函式(類)本身

每乙個物件資料型別(普通的物件,例項,prototype..)也天生自帶乙個屬性: _ _proto _ _,屬性值是當前例項所屬類的原型(prototype)

function fn()

fn.prototype.getx = function()

var f1 = new fn;

var f2 = new fn;

console.log(fn.prototype.constructor === fn); // true

console.log(f1 instanceof object); // true

通過 物件名.屬性名 的方式獲取屬性值的時候, 首先在物件的私有的屬性上進行查詢, 如果私有中存在這個屬性,則獲取的是私有的屬性值;

如果私有的沒有,則通過__proto__找到所屬類的原型, 類的原型上定義的屬性和方法都是當前例項公有的屬性和方法, 原型上存在的話, 獲取的是共有的屬性值;

如果原型上也沒有,則繼續通過原型上的__proto__繼續向上查詢, 一直找到obejct.prototype為止

console.log(f1.getx === f2.getx); // true

console.log(f1.__proto__.getx === f2.getx);// true

console.log(f1.getx === fn.prototype.getx); // true

在ie瀏覽器中,原型模式也是同樣的原理,但是ie瀏覽器怕你通過__proto__把公有的修改,禁止我們修改__proto__

通過 物件名.屬性名 的方式獲取屬性值的時候, 首先在物件的私有的屬性上進行查詢, 如果私有中存在這個屬性,則獲取的是私有的屬性值;

如果私有的沒有,則通過__proto__找到所屬類的原型, 類的原型上定義的屬性和方法都是當前例項公有的屬性和方法, 原型上存在的話, 獲取的是共有的屬性值;

如果原型上也沒有,則繼續通過原型上的__proto__繼續向上查詢, 一直找到obejct.prototype為止

console.log(f1.getx === f2.getx); // true

console.log(f1.__proto__.getx === f2.getx);// true

console.log(f1.getx === fn.prototype.getx); // true

在ie瀏覽器中,原型模式也是同樣的原理,但是ie瀏覽器怕你通過__proto__把公有的修改,禁止我們修改__proto__

JS原型鏈模式和繼承模式

例項識別 建構函式模式中擁有了類和例項的概念,並且例項和例項之間是相互獨立開的 function createjsperson name,age createjsperson.prototype.writejs function 基於建構函式模式的原型模式解決了,方法或者屬性共有的問題,想讓誰共有就...

原型模式與原型鏈(js學習)

物件的原型 prototype 指向另乙個物件,本物件的屬性繼承於他的原型物件。原型物件 原型模式 我們建立的每乙個函式都有乙個prototype 原型 屬性,這個屬性是乙個指標,指向乙個物件。這個物件就是通過呼叫建構函式而建立的那個物件例項的原型物件。使用原型物件,就不必在建構函式中定義物件例項的...

JS學習之原型和原型鏈模式

原型鏈模式 1 每乙個物件 例項也是物件 都有乙個天生自帶的屬性 proto 這個屬性指向當前所屬類的原型 prototype 2 每乙個函式 類也是函式 都有乙個天生自帶的屬性 prototype 原型 並且這個屬性儲存的值是乙個物件資料型別的資料,瀏覽器預設給這個屬性開闢乙個堆記憶體 在這個堆記...