中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

政府網(wǎng)站建設(shè)未來(lái)發(fā)展方向百度本地推廣

政府網(wǎng)站建設(shè)未來(lái)發(fā)展方向,百度本地推廣,做鮮榨果汁店網(wǎng)站,永久免費(fèi)erp經(jīng)典模式和圣杯模式區(qū)別 經(jīng)典模式和圣杯模式都是用于解決構(gòu)造函數(shù)繼承和原型繼承的問(wèn)題,但它們?cè)趯?shí)現(xiàn)繼承的方式上有所不同。 經(jīng)典模式是通過(guò)將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的實(shí)例來(lái)實(shí)現(xiàn)繼承,然后將子類(lèi)的構(gòu)造函數(shù)設(shè)置為子類(lèi)本身。這樣子類(lèi)既可以繼承父類(lèi)…

經(jīng)典模式和圣杯模式區(qū)別

經(jīng)典模式和圣杯模式都是用于解決構(gòu)造函數(shù)繼承和原型繼承的問(wèn)題,但它們?cè)趯?shí)現(xiàn)繼承的方式上有所不同。

經(jīng)典模式是通過(guò)將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的實(shí)例來(lái)實(shí)現(xiàn)繼承,然后將子類(lèi)的構(gòu)造函數(shù)設(shè)置為子類(lèi)本身。這樣子類(lèi)既可以繼承父類(lèi)的屬性,也可以繼承父類(lèi)原型對(duì)象的方法。但是經(jīng)典模式存在一個(gè)問(wèn)題,就是每次創(chuàng)建子類(lèi)的實(shí)例時(shí)都會(huì)調(diào)用一次父類(lèi)的構(gòu)造函數(shù),導(dǎo)致父類(lèi)的屬性被重復(fù)初始化。

圣杯模式是在經(jīng)典模式的基礎(chǔ)上進(jìn)行了改進(jìn),通過(guò)使用一個(gè)中間函數(shù)來(lái)實(shí)現(xiàn)繼承。這個(gè)中間函數(shù)將父類(lèi)的原型對(duì)象賦值給一個(gè)臨時(shí)的構(gòu)造函數(shù),并將子類(lèi)的原型對(duì)象設(shè)置為這個(gè)臨時(shí)構(gòu)造函數(shù)的實(shí)例。這樣子類(lèi)既可以繼承父類(lèi)原型對(duì)象的方法,又不會(huì)重復(fù)調(diào)用父類(lèi)的構(gòu)造函數(shù)。此外,圣杯模式還通過(guò)將子類(lèi)的原型對(duì)象的constructor屬性設(shè)置為子類(lèi)本身來(lái)修復(fù)原型鏈斷裂的問(wèn)題。

下面是經(jīng)典模式和圣杯模式的代碼示例:

經(jīng)典模式:

function Parent(name) {this.name = name;
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child(name) {Parent.call(this, name);
}Child.prototype = new Parent();
Child.prototype.constructor = Child;

圣杯模式:

function Parent(name) {this.name = name;
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function inherit(C, P) {function F() {}F.prototype = P.prototype;C.prototype = new F();C.prototype.constructor = C;
}function Child(name) {Parent.call(this, name);
}inherit(Child, Parent);

經(jīng)典模式和圣杯模式都是用于實(shí)現(xiàn)繼承的方式,但圣杯模式在解決經(jīng)典模式中的問(wèn)題上更加優(yōu)化和完善。

圣杯模式

1. 原型:

原型是JavaScript中用來(lái)實(shí)現(xiàn)對(duì)象之間繼承關(guān)系的概念。每個(gè)JavaScript對(duì)象都有一個(gè)原型對(duì)象,它是一個(gè)普通的對(duì)象,包含了對(duì)象的屬性和方法。當(dāng)我們?cè)L問(wèn)一個(gè)對(duì)象的屬性或方法時(shí),如果對(duì)象本身不存在該屬性或方法,JavaScript會(huì)自動(dòng)去原型對(duì)象中查找。

2. 原型鏈:

原型鏈?zhǔn)且环N通過(guò)原型對(duì)象來(lái)實(shí)現(xiàn)對(duì)象之間繼承關(guān)系的機(jī)制。每個(gè)對(duì)象都有一個(gè)原型對(duì)象,通過(guò)原型鏈,一個(gè)對(duì)象可以訪問(wèn)其原型對(duì)象的屬性和方法。原型鏈?zhǔn)怯梢幌盗性蛯?duì)象組成的,當(dāng)我們?cè)L問(wèn)一個(gè)對(duì)象的屬性或方法時(shí),JavaScript會(huì)自動(dòng)沿著原型鏈向上查找,直到找到該屬性或方法或者到達(dá)原型鏈的頂端。

3. 繼承:

繼承是一種面向?qū)ο缶幊讨械闹匾拍?#xff0c;它允許我們創(chuàng)建一個(gè)新的對(duì)象,并從一個(gè)已有的對(duì)象中繼承屬性和方法。通過(guò)繼承,我們可以避免重復(fù)編寫(xiě)相同的代碼,提高代碼的復(fù)用性和可維護(hù)性。

相應(yīng)的代碼示例:

a. 原型鏈繼承:

原型鏈繼承是一種簡(jiǎn)單的繼承方式,它通過(guò)將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的實(shí)例來(lái)實(shí)現(xiàn)繼承。這樣子類(lèi)就可以訪問(wèn)父類(lèi)原型對(duì)象的屬性和方法。

function Parent() {this.name = 'Parent';
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child() {this.name = 'Child';
}Child.prototype = new Parent();var child = new Child();
child.sayHello(); // 輸出: Hello, I am Child

在這個(gè)例子中,我們定義了一個(gè)父類(lèi)Parent和一個(gè)子類(lèi)Child。在子類(lèi)中,我們將其原型對(duì)象設(shè)置為父類(lèi)的實(shí)例,這樣子類(lèi)就可以繼承父類(lèi)的屬性和方法。在子類(lèi)的實(shí)例中,我們可以調(diào)用父類(lèi)原型對(duì)象的方法。

b. 構(gòu)造函數(shù)繼承:

構(gòu)造函數(shù)繼承是一種通過(guò)調(diào)用父類(lèi)的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)繼承的方式。子類(lèi)通過(guò)調(diào)用父類(lèi)的構(gòu)造函數(shù)來(lái)繼承父類(lèi)的屬性,并在子類(lèi)的構(gòu)造函數(shù)中使用call方法來(lái)調(diào)用父類(lèi)的構(gòu)造函數(shù)。

function Parent(name) {this.name = name;
}function Child(name) {Parent.call(this, name);
}var child = new Child('Child');
console.log(child.name); // 輸出: Child

在這個(gè)例子中,我們定義了一個(gè)父類(lèi)Parent和一個(gè)子類(lèi)Child。在子類(lèi)的構(gòu)造函數(shù)中,我們使用call方法調(diào)用父類(lèi)的構(gòu)造函數(shù),并將子類(lèi)的實(shí)例作為this參數(shù)傳遞給父類(lèi)的構(gòu)造函數(shù)。這樣子類(lèi)就可以繼承父類(lèi)的屬性。

c. 組合繼承:

組合繼承是一種通過(guò)同時(shí)使用原型鏈繼承和構(gòu)造函數(shù)繼承來(lái)實(shí)現(xiàn)繼承的方式。它通過(guò)將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的實(shí)例,并在子類(lèi)的構(gòu)造函數(shù)中調(diào)用父類(lèi)的構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)繼承。

function Parent(name) {this.name = name;
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child(name) {Parent.call(this, name);
}Child.prototype = new Parent();
Child.prototype.constructor = Child;var child = new Child('Child');
child.sayHello(); // 輸出: Hello, I am Child

在這個(gè)例子中,我們定義了一個(gè)父類(lèi)Parent和一個(gè)子類(lèi)Child。在子類(lèi)的構(gòu)造函數(shù)中,我們使用call方法調(diào)用父類(lèi)的構(gòu)造函數(shù),并將子類(lèi)的實(shí)例作為this參數(shù)傳遞給父類(lèi)的構(gòu)造函數(shù)。然后,我們將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的實(shí)例,并將子類(lèi)的構(gòu)造函數(shù)設(shè)置為子類(lèi)本身。這樣子類(lèi)既可以繼承父類(lèi)的屬性,也可以繼承父類(lèi)原型對(duì)象的方法。

詳細(xì)代碼說(shuō)明

a. 原型鏈繼承:

function Parent() {this.name = 'Parent';
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child() {this.name = 'Child';
}Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;var child = new Child();
child.sayHello(); // 輸出: Hello, I am Child

在這個(gè)例子中,我們使用Object.create()方法將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的原型對(duì)象的一個(gè)副本。這樣子類(lèi)就可以繼承父類(lèi)原型對(duì)象的屬性和方法。

b. 構(gòu)造函數(shù)繼承:

function Parent(name) {this.name = name;
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child(name) {Parent.call(this, name);
}var child = new Child('Child');
child.sayHello(); // 輸出: TypeError: child.sayHello is not a function

在這個(gè)例子中,我們通過(guò)調(diào)用父類(lèi)的構(gòu)造函數(shù)來(lái)繼承父類(lèi)的屬性,但是子類(lèi)無(wú)法繼承父類(lèi)原型對(duì)象的方法。

c. 組合繼承:

function Parent(name) {this.name = name;
}Parent.prototype.sayHello = function() {console.log('Hello, I am ' + this.name);
}function Child(name) {Parent.call(this, name);
}Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;var child = new Child('Child');
child.sayHello(); // 輸出: Hello, I am Child

在這個(gè)例子中,我們使用Object.create()方法將子類(lèi)的原型對(duì)象設(shè)置為父類(lèi)的原型對(duì)象的一個(gè)副本,并將子類(lèi)的構(gòu)造函數(shù)設(shè)置為子類(lèi)本身。這樣子類(lèi)既可以繼承父類(lèi)的屬性,也可以繼承父類(lèi)原型對(duì)象的方法。

http://m.risenshineclean.com/news/64045.html

相關(guān)文章:

  • 沈陽(yáng)網(wǎng)站訂制公眾號(hào)軟文推廣
  • 想注冊(cè)一個(gè)做網(wǎng)站的公司好友情鏈接的形式
  • 網(wǎng)站的風(fēng)格保持一致簡(jiǎn)述網(wǎng)站推廣的方法
  • 專(zhuān)業(yè)移動(dòng)微網(wǎng)站設(shè)計(jì)海南seo
  • 青島路橋建設(shè)集團(tuán)有限公司網(wǎng)站seo關(guān)鍵詞優(yōu)化推廣價(jià)格
  • 做網(wǎng)站用百度地圖和天地圖怎樣建立網(wǎng)站免費(fèi)的
  • 實(shí)用電子商務(wù)網(wǎng)站建立廈門(mén)關(guān)鍵詞排名seo
  • 網(wǎng)站在線(xiàn)咨詢(xún)?cè)趺醋霭俣韧茝V怎么操作流程
  • 手機(jī)網(wǎng)站 建設(shè)注冊(cè)域名后如何建立網(wǎng)站
  • 怎么做網(wǎng)站關(guān)鍵詞搜索廣西網(wǎng)絡(luò)優(yōu)化seo
  • 跟網(wǎng)站開(kāi)發(fā)有關(guān)系的工作有哪些郵件營(yíng)銷(xiāo)
  • wordpress免費(fèi)教育主題搜索引擎優(yōu)化技術(shù)有哪些
  • 深圳做網(wǎng)站收費(fèi)百度產(chǎn)品
  • wordpress 作者idseo網(wǎng)站推廣免費(fèi)
  • 光之翼可以做網(wǎng)站嗎中國(guó)網(wǎng)新山東
  • 一個(gè)主機(jī)可以建設(shè)多少個(gè)網(wǎng)站seo推廣培訓(xùn)資料
  • 網(wǎng)站做代理服務(wù)器網(wǎng)站制作培訓(xùn)
  • 品牌網(wǎng)站分析關(guān)鍵詞在線(xiàn)聽(tīng)
  • 做網(wǎng)站需要做什么頁(yè)面媒體網(wǎng)絡(luò)推廣價(jià)格優(yōu)惠
  • 怎么樣開(kāi)網(wǎng)站淘寶店鋪怎么推廣
  • 成都網(wǎng)站建設(shè)易維達(dá)好互聯(lián)網(wǎng)營(yíng)銷(xiāo)的特點(diǎn)
  • 做公司網(wǎng)站注意事項(xiàng)網(wǎng)站推廣優(yōu)化平臺(tái)
  • 怎么按照屏幕比例做網(wǎng)站適應(yīng)安裝百度一下
  • 網(wǎng)頁(yè)靠什么賺錢(qián)南京seo網(wǎng)絡(luò)優(yōu)化公司
  • 用dw做網(wǎng)站結(jié)構(gòu)圖域名查詢(xún) 站長(zhǎng)查詢(xún)
  • 個(gè)人可以做商城網(wǎng)站嗎優(yōu)秀品牌策劃方案
  • 手機(jī)網(wǎng)站做指向推廣教程
  • 建設(shè)黨史網(wǎng)站的意義在線(xiàn)智能識(shí)圖
  • 比價(jià)網(wǎng)站源碼整站程序百度上做優(yōu)化
  • h5可以做網(wǎng)站么免費(fèi)推廣途徑