摘要:現(xiàn)在有兩個(gè)對(duì)象我們希望繼承,因?yàn)楹投际瞧胀ǖ膶?duì)象,不是構(gòu)造函數(shù),所以這里無(wú)法依賴于構(gòu)造函數(shù)的繼承。那方法是創(chuàng)建一個(gè)以某個(gè)對(duì)象為藍(lán)本而生成的對(duì)象簡(jiǎn)單粗暴地拷貝所有的屬性
現(xiàn)在有兩個(gè)對(duì)象:
Man = { sex: "male" } Student = { job: "student" }
我們希望student繼承person,因?yàn)閜erson和student都是普通的對(duì)象,不是構(gòu)造函數(shù),所以這里無(wú)法依賴于構(gòu)造函數(shù)的繼承。那方法是:
1: 創(chuàng)建一個(gè)以某個(gè)對(duì)象為藍(lán)本而生成的對(duì)象
function object(parent){ var F = function(){}; F.prototype = parent; return new F(); } var maleStudent = object(Man); maleStudent.job = "student"; maleStudent.sex === "male";//true
2: 簡(jiǎn)單粗暴地拷貝所有的屬性
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"]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/83518.html
摘要:因?yàn)槲覀冇眠@個(gè)函數(shù)來(lái)構(gòu)造對(duì)象,所以我們也把稱作構(gòu)造函數(shù)。所以通過(guò)定義構(gòu)造函數(shù),就相當(dāng)于定義了一個(gè)類,通過(guò)關(guān)鍵字,即可生成一個(gè)實(shí)例化的對(duì)象。 一、序言 ??和其他面向?qū)ο蟮恼Z(yǔ)言(如Java)不同,Javascript語(yǔ)言對(duì)類的實(shí)現(xiàn)和繼承的實(shí)現(xiàn)沒(méi)有標(biāo)準(zhǔn)的定義,而是將這些交給了程序員,讓程序員更加靈活地(當(dāng)然剛開(kāi)始也更加頭疼)去定義類,實(shí)現(xiàn)繼承。(以下不討論ES6中利用class、exten...
摘要:原文鏈接一什么是非構(gòu)造函數(shù)的繼承比如,現(xiàn)在有一個(gè)對(duì)象,叫做中國(guó)人。通過(guò)函數(shù),繼承了。中國(guó)北京上海香港廈門北京上海香港廈門北京上海香港這時(shí),父對(duì)象就不會(huì)受到影響了。目前,庫(kù)使用的就是這種繼承方法。 原文鏈接 一、什么是非構(gòu)造函數(shù)的繼承? 比如,現(xiàn)在有一個(gè)對(duì)象,叫做中國(guó)人。 var Chinese = { nation: 中國(guó) } 還有一個(gè)對(duì)象,叫做醫(yī)生。 var Doctor = {...
摘要:這樣肯定不行,給添加方法或影響到這種方式有一個(gè)缺點(diǎn),在一個(gè)實(shí)例時(shí)會(huì)調(diào)用兩次構(gòu)造函數(shù)一次是,另一次是,浪費(fèi)效率,且如果構(gòu)造函數(shù)有副作用,重復(fù)調(diào)用可能造成不良后果。 寫(xiě)在前面 此文只涉及基于原型的繼承,ES6之后基于Class的繼承請(qǐng)參考相關(guān)文獻(xiàn)。 知識(shí)儲(chǔ)備 構(gòu)造函數(shù)的兩種調(diào)用方式(結(jié)果完全不同) 通過(guò)關(guān)鍵字new調(diào)用: function Person(name) { this.n...
摘要:防止類的構(gòu)造函數(shù)以普通函數(shù)的方式調(diào)用。這個(gè)函數(shù)的主要作用是通過(guò)給類添加方法,其中將靜態(tài)方法添加到構(gòu)造函數(shù)上,將非靜態(tài)的方法添加到構(gòu)造函數(shù)的原型對(duì)象上。 Class是ES6中新加入的繼承機(jī)制,實(shí)際是Javascript關(guān)于原型繼承機(jī)制的語(yǔ)法糖,本質(zhì)上是對(duì)原型繼承的封裝。本文將會(huì)討論:1、ES6 class的實(shí)現(xiàn)細(xì)2、相關(guān)Object API盤點(diǎn)3、Javascript中的繼承實(shí)現(xiàn)方案盤點(diǎn)...
閱讀 2956·2021-10-08 10:12
閱讀 4058·2021-09-22 15:45
閱讀 2627·2019-08-30 15:52
閱讀 2696·2019-08-29 18:44
閱讀 2706·2019-08-29 12:37
閱讀 1227·2019-08-26 13:36
閱讀 2624·2019-08-26 13:34
閱讀 1538·2019-08-26 12:20