摘要:一偽類當(dāng)一個(gè)函數(shù)對(duì)象被創(chuàng)建時(shí),構(gòu)造器產(chǎn)生的函數(shù)對(duì)象會(huì)運(yùn)行類似這樣的代碼新函數(shù)對(duì)象被賦予了一個(gè)屬性,他的值是一個(gè)包含屬性且屬性值為該新函數(shù)的對(duì)象。這個(gè)對(duì)象是存放繼承特征的地方。
一、偽類
當(dāng)一個(gè)函數(shù)對(duì)象被創(chuàng)建時(shí),F(xiàn)unction構(gòu)造器產(chǎn)生的函數(shù)對(duì)象會(huì)運(yùn)行類似這樣的代碼:
this.prototype = { constructor: this};
新函數(shù)對(duì)象被賦予了一個(gè)prototype屬性,他的值是一個(gè)包含constructor屬性且屬性值為該新函數(shù)的對(duì)象。這個(gè)prototype對(duì)象是存放繼承特征的地方。
Function.method("new",function(){ //創(chuàng)建一個(gè)新對(duì)象,它繼承自構(gòu)造函數(shù)的原型對(duì)象 var that = Object.create(this.prototype); // 調(diào)用構(gòu)造函數(shù),綁定-this-到新對(duì)象上 var other = this.apply(that,arguments); //如果返回值不是一個(gè)對(duì)象,就返回該新對(duì)象 return (typeof other ==="object"&&other)||that; })
我們定義一個(gè)構(gòu)造器來擴(kuò)充它的原型
var Mammal = function(name){ this.name=name; }; Mammal.prototype.get_name = function(){ return this.name; }; Mammal.prototype.says = function(){ return this.saying || ""; }
現(xiàn)在我們構(gòu)造一個(gè)實(shí)例
var myMammal = new Mammal("hello world!"); var name = myMammal.get_name();
我們構(gòu)造一個(gè)偽類來繼承Mammal,通過定義它的constructor函數(shù)并替換他的prototype為一個(gè)Mamma
var Cat = function(name){ this.name =name; this.saying= "meow"; }
替換Cat.prototype為一個(gè)新的Mammal實(shí)例
Cat.prototype =new Mammal();
擴(kuò)充新原型對(duì)象增加get_name方法
Cat.prototype.get_name = function(){ return this.says()+""+this.name+""+this.says(); }; var myCat =new Cat("wsm"); var says = myCat.says(); var name= myCat.get_name();二、原型
構(gòu)造一個(gè)有用的對(duì)象開始,接著可以構(gòu)造更多和那個(gè)對(duì)象類似的對(duì)象。
Object.create方法構(gòu)造更多的實(shí)例三、函數(shù)化
運(yùn)用模塊模式的繼承模式去保護(hù)隱私。
1、創(chuàng)建一個(gè)新對(duì)象,可以通過構(gòu)造一個(gè)對(duì)象字面量或者和new淺醉連用去調(diào)用一個(gè)構(gòu)造函數(shù),或者使用Object.create構(gòu)造一個(gè)已經(jīng)存在的對(duì)象的新實(shí)例,或者調(diào)用任意一個(gè)會(huì)韓慧一個(gè)對(duì)象的函數(shù)
2、有選擇的定義私有實(shí)例變量和方法。
3、給這個(gè)新對(duì)象擴(kuò)充方法。
4、返回那個(gè)新對(duì)象
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107680.html
摘要:通過可取可取的他們所屬對(duì)象的上下文的方法稱為公共方法函數(shù)調(diào)用模式當(dāng)一個(gè)函數(shù)并非一個(gè)對(duì)象的屬性時(shí),那么它就是被當(dāng)做一個(gè)函數(shù)來調(diào)用的,以此模式調(diào)用函數(shù),被綁定到了全局對(duì)象。 前言: 前端這兩年的新技術(shù)鋪天蓋地,各種框架、工具層出不窮眼花繚亂。最近打算好好復(fù)習(xí)下 js 基礎(chǔ),夯實(shí)的基礎(chǔ)才是學(xué)習(xí)新技術(shù)的基石。本文作為讀書筆記簡(jiǎn)單的總結(jié)下 js 函數(shù)的基礎(chǔ)知識(shí)。 一、函數(shù)對(duì)象 JavaScr...
摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:前提中閉包無處不在,你只需要能夠識(shí)別并擁有它。一實(shí)質(zhì)問題當(dāng)函數(shù)可以記住并訪問所在的詞法作用域是,就產(chǎn)生了閉包。依然持有該作用域的引用。延遲函數(shù)的回調(diào)會(huì)在循環(huán)結(jié)束時(shí)才執(zhí)行。每個(gè)延遲函數(shù)都會(huì)講在每次迭代中創(chuàng)建的作用域封閉起來。 前提:JavaScript中閉包無處不在,你只需要能夠識(shí)別并擁有它。閉包是基于詞法作用域書寫代碼時(shí)自然產(chǎn)生的結(jié)果。 一、實(shí)質(zhì)問題 當(dāng)函數(shù)可以記住并訪問所在的詞法作用...
摘要:對(duì)象字面量數(shù)組運(yùn)行數(shù)組包括任意混合類型的數(shù)組。屬性的值是這些數(shù)組的最大整數(shù)屬性名加上。它等于數(shù)組里的屬性的個(gè)數(shù)??梢允褂孟驍?shù)組中增加元素,也可以用方式加入到數(shù)組中。六指定初始值數(shù)組通常不會(huì)預(yù)置頂。 一、數(shù)組字面量 數(shù)組字面量提供了一種非常方便的創(chuàng)建數(shù)組的表達(dá)法。 一個(gè)數(shù)組字面量是在一對(duì)方括號(hào)中包圍零個(gè)或多個(gè)用逗號(hào)分隔的值的表達(dá)式。 對(duì)象字面量數(shù)組: var numbers_obje...
摘要:繼承繼承子類可以使用父類的所有功能,并且對(duì)這些功能進(jìn)行擴(kuò)展。類繼承父類父類添加共有方法子類繼承父類子類添加共有方法其中最核心的一句代碼是將原型指向了父類的原型對(duì)象。 繼承 繼承:子類可以使用父類的所有功能,并且對(duì)這些功能進(jìn)行擴(kuò)展。繼承的過程,就是從一般到特殊的過程。 類繼承 // 父類 var supperClass = function() { var id = 1; thi...
閱讀 2917·2021-10-19 10:09
閱讀 3136·2021-10-09 09:41
閱讀 3384·2021-09-26 09:47
閱讀 2696·2019-08-30 15:56
閱讀 602·2019-08-29 17:04
閱讀 992·2019-08-26 11:58
閱讀 2511·2019-08-26 11:51
閱讀 3361·2019-08-26 11:29