摘要:現在有兩個對象我們希望繼承,因為和都是普通的對象,不是構造函數,所以這里無法依賴于構造函數的繼承。那方法是創建一個以某個對象為藍本而生成的對象簡單粗暴地拷貝所有的屬性
現在有兩個對象:
Man = { sex: "male" } Student = { job: "student" }
我們希望student繼承person,因為person和student都是普通的對象,不是構造函數,所以這里無法依賴于構造函數的繼承。那方法是:
1: 創建一個以某個對象為藍本而生成的對象
function object(parent){ var F = function(){}; F.prototype = parent; return new F(); } var maleStudent = object(Man); maleStudent.job = "student"; maleStudent.sex === "male";//true
2: 簡單粗暴地拷貝所有的屬性
function deepCopy(parent, child){ var child = child || {}; for (i in parent) { if(typeof parent[i] === "object"){ child[i] = parent[i].constructor === "Array"? []: {}; deepCopy(parent[i], child[i]); } else{ child[i] = parent[i] } } return child; } var parent = { color: ["red", "green"], name: { firstName: "hehe", lastName: "Ha" } } var child = deepCopy(parent); child.color;// ["red", "green"]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83518.html
摘要:因為我們用這個函數來構造對象,所以我們也把稱作構造函數。所以通過定義構造函數,就相當于定義了一個類,通過關鍵字,即可生成一個實例化的對象。 一、序言 ??和其他面向對象的語言(如Java)不同,Javascript語言對類的實現和繼承的實現沒有標準的定義,而是將這些交給了程序員,讓程序員更加靈活地(當然剛開始也更加頭疼)去定義類,實現繼承。(以下不討論ES6中利用class、exten...
摘要:原文鏈接一什么是非構造函數的繼承比如,現在有一個對象,叫做中國人。通過函數,繼承了。中國北京上海香港廈門北京上海香港廈門北京上海香港這時,父對象就不會受到影響了。目前,庫使用的就是這種繼承方法。 原文鏈接 一、什么是非構造函數的繼承? 比如,現在有一個對象,叫做中國人。 var Chinese = { nation: 中國 } 還有一個對象,叫做醫生。 var Doctor = {...
摘要:這樣肯定不行,給添加方法或影響到這種方式有一個缺點,在一個實例時會調用兩次構造函數一次是,另一次是,浪費效率,且如果構造函數有副作用,重復調用可能造成不良后果。 寫在前面 此文只涉及基于原型的繼承,ES6之后基于Class的繼承請參考相關文獻。 知識儲備 構造函數的兩種調用方式(結果完全不同) 通過關鍵字new調用: function Person(name) { this.n...
摘要:防止類的構造函數以普通函數的方式調用。這個函數的主要作用是通過給類添加方法,其中將靜態方法添加到構造函數上,將非靜態的方法添加到構造函數的原型對象上。 Class是ES6中新加入的繼承機制,實際是Javascript關于原型繼承機制的語法糖,本質上是對原型繼承的封裝。本文將會討論:1、ES6 class的實現細2、相關Object API盤點3、Javascript中的繼承實現方案盤點...
閱讀 2867·2021-10-08 10:12
閱讀 3966·2021-09-22 15:45
閱讀 2555·2019-08-30 15:52
閱讀 2625·2019-08-29 18:44
閱讀 2644·2019-08-29 12:37
閱讀 1154·2019-08-26 13:36
閱讀 2561·2019-08-26 13:34
閱讀 1473·2019-08-26 12:20