首頁 >web前端 >js教程 >js原型物件和原型鏈的分析介紹(附程式碼)

js原型物件和原型鏈的分析介紹(附程式碼)

不言
不言原創
2018-08-15 15:51:521553瀏覽

這篇文章帶給大家的內容是關於js原型和原型鏈的知識介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

先宣告一個建構子

function People(name,age){
        this.name = name;
        this.age = age;
    }

把類別的方法寫在建構子原型物件中,子類別就不能再透過呼叫父類別建構子來繼承方法(屬性還是可以繼承)

// 给People的原型添加方法
People.prototype.speak = function(){
        console.log("我是"+this.name);
    }
// 创建子类继承People
function Man(name,age,huzi){
        People.call(this,name,age);
        this.huzi = huzi;
    }

(People和Man的屬性和方法都可以輸出和呼叫檢視,程式碼裡就不展示測試程式碼了)

這時候怎麼讓Man去繼承People的方法?

Man.prototype = People.prototype;
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

然而這樣並不對!不能直接把子類的prototype指向父類的prototype,這樣會導致兩個構造函數共用一個prototype,其中的方法父類子類的對像都可訪問,而正確的情況應該是子類別可以存取父類別的方法,而父類別不能存取子類別的方法

js物件的原型也是物件,所以js原型也有原型.

當存取一個對象的方法時,如果物件中存在則直接存取,如果不存在則在物件的原型中尋找,有則存取,沒有則在原型的原型中尋找,如果還沒有則繼續網路上尋找,直到找到Object位置

Object是一個類別(建構子),這個類別的物件的原型沒有原型

js物件的原型,與js原型的原型組成的鍊式結構叫做js原型鏈

子類別要繼承父類別的方法,則需要把子類別的建構子類別的prototype物件的原型(__proto__)設定為父類別建構子的prototype

那麼就是這麼寫:

Man.prototype.__proto__ = People.prototype;

這樣寫可以,但官方給的有個更好標準的寫法(這樣寫並沒錯)

// Object.create用于指定原型创建一个对象(空对象)
    Man.prototype = Object.create(People.prototype);
    Man.prototype.smoke = function(){
        console.log("抽烟");
    }

子類繼承父類時,除了可以擴展新的方法,還可以重寫父類別已有的方法,當使用子類別物件呼叫重寫的方法,會執行子類別自己的方法

Man.prototype.speak = function(){
        console.log("我是男性");
    }

 相關推薦:

JS核心系列:淺談原型物件和原型鏈

js中的作用域鍊和原型鏈以及原型繼承

js的原型及原型鏈詳解

學習javascript物件導向 理解javascript原型與原型鏈_javascript技巧

以上是js原型物件和原型鏈的分析介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn