這篇文章給大家介紹怎么在JavaScript中使用prototype實(shí)現(xiàn)偽繼承,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)建站主要從事網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)海門(mén),十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):028-86922220JavaScript是什么JS是JavaScript的簡(jiǎn)稱(chēng),它是一種直譯式的腳本語(yǔ)言,其解釋器被稱(chēng)為JavaScript引擎,是瀏覽器的一部分,主要用于web的開(kāi)發(fā),可以給網(wǎng)站添加各種各樣的動(dòng)態(tài)效果,讓網(wǎng)頁(yè)更加美觀(guān)。
第一種繼承 (屬性繼承)
//該函數(shù)相當(dāng)于是一個(gè)構(gòu)造器,也是一個(gè)偽類(lèi) function Fn(){ this.a = 4; this.b = 5; this.log = function(){ console.log(this.a,this.b); } } function Fn1(){ Fn.call(this);//調(diào)用父類(lèi)的構(gòu)造函數(shù) } Fn1.prototype = Fn.prototype; var fn = new Fn(); var fn1 = new Fn1(); //由此可見(jiàn)Fn1 是fn1的子類(lèi)。 fn1 instanceof Fn; // true fn instanceof Fn1; // true fn.a = 5; //由此可見(jiàn)Fn1 繼承了 Fn得所有屬性和方法 //而是是復(fù)制了一份Fn的屬性和方法,并不是對(duì)象的引用。 console.log(fn.a); // 5 console.log(fn1.a); // 4 this.log(); // 4 5
總結(jié): 這種繼承,是重新拷貝一份放入內(nèi)存中,他們的值互相獨(dú)立,修改一個(gè)不會(huì)改變另一個(gè)。
第二種繼承 原型繼承(prototype)
function Fn(){} Fn.prototype.data = { name: 'zhangsan' } Fn.prototype.getName = function(){ return this.data.name; } function Fn1(){} //原型鏈繼承 Fn1.prototype = Fn.prototype; var fn = new Fn(); var fn1 = new Fn1(); //所用Fn1 繼承了 Fn fn1 instanceof Fn;//true console.log(fn1.getName()); // zhangsan console.log(fn.getName()); // zhangsan //修改了fn的name屬性值 fn.data.name = 'lisi'; // 由此我們可看出 原型鏈繼承 是 引用繼承 //不會(huì)重新拷貝一份變量。就像對(duì)象的引用一樣。 console.log(fn.getName()); // lisi console.log(fn1.getName()); // lisi
兩種類(lèi)的寫(xiě)法造成示例的區(qū)別
//第一種 function Fn(){ this.a = 4; this.b = 5; this.log = function(){ console.log(this.a,this.b); } } var fn1 = new Fn(); var fn2 = new Fn(); fn1.a = 1; //由此可以看出兩個(gè)對(duì)象互不影響 //說(shuō)明每個(gè)對(duì)象里都存在一份a和b fn1.log(); // 1 5 fn2.log(); // 4 5 //第二種 function Fn(){} fn.prototype.name = 'zhangsan'; fn.prototype.data = { a: 4, b: 5 } fn.prototype.log = function(){ console.log(this.data.a,this.data.b); } var fn1 = new Fn(); var fn2 = new Fn(); fn1.a = 1; //由此可見(jiàn)就算是不同的示例他們他們所指向的值是同一個(gè)。 fn1.log();//1 5 fn2.log();//1 5 fn2.name = 'lisi'; //這里fn1.name并沒(méi)有被修改 console.log(fn1.name); //zhangan console.log(fn2.name); // lisi
關(guān)于怎么在JavaScript中使用prototype實(shí)現(xiàn)偽繼承就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。