国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

javascript實現面向對象類的功能書寫技巧

2019-11-21 00:41:51
字體:
來源:轉載
供稿:網友
學過java,c#,vb的都知道類的概念,而類具有繼承、封裝、多態等功能。而javascript它不是面向對象語言,它是解釋性語言。
但我們同樣可以使用javascript來實現繼承、多態。
javascript實現類,有多種方法。
方法一:構造方法。
代碼
復制代碼 代碼如下:

function coder(){
this.name = '小王';
this.job = '程序員';
this.coding = function ()
{
alert('我正在寫代碼');
}
}
var coder=new coder();
alert(coder.name);
coder.coding();

方法二:工廠方法。
代碼
復制代碼 代碼如下:

function createCoderFactory(){
var obj=new Object();
obj.name = '小王';
obj.job = '程序員';
obj.coding = function (){
alert('我正在寫代碼');
};
return obj;
}
var coder = createCoderFactory();
alert(coder.name);
coder.coding();

但工廠方法和構造方法都有著一個相同的缺點,就是每創建一個實例,都會實例化該類的每個函數。
方法三:原形鏈。
代碼
復制代碼 代碼如下:

function coder(){}
coder.prototype.name = '小王';
coder.prototype.job = '程序員';
coder.prototype.coding = function(){
alert('我正在寫代碼');
};
var coder = new coder();
alert(coder.name);
coder.coding();

注意:書上說:原型鏈有個缺點就是它所有屬性都共享,只要一個實例改變其他的都會跟著改變。 測試如下:
復制代碼 代碼如下:

var coder1 = new coder();
var coder2 = new coder();
alert(coder1.name); /*顯示“小王”*/
coder2.name = '老王';
alert(coder1.name); /*這個顯示“小王” 如果按書上說的應該是顯示"老王"*/
alert(coder2.name); /*這個顯示“老王”*/
alert(coder1.name);如果按書上說的應該是顯示"老王",但這里顯示的是“小王”,所以書上出錯了。

方法四:混合方式。
以上三種都有著各自的缺點,所以我們要加以改進。
復制代碼 代碼如下:

function coder(){
this.name = '小王';
this.job = '程序員';
}
coder.prototype.coding = function(){
alert('我正在寫代碼');
};

方法五:動態原鏈。
要解決前三種的缺點,還有一種方法。
代碼
復制代碼 代碼如下:

function coder(){
this.name = '小王';
this.job = '程序員';
if (typeof(coder._init) == 'undefined'){
this.coding = function ()
{
alert('我正在寫代碼');
};
this._init = true;
}
}

這個方法呢,當第一次使用時,由于_init沒初始化,就會執行以下的代碼,實例化coding函數。以后就不會再執行,這樣就只實例化函數一次。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平遥县| 阿瓦提县| 新蔡县| 资中县| 万载县| 海宁市| 海伦市| 梧州市| 山阳县| 阜宁县| 高平市| 凤冈县| 马山县| 临沭县| 杭锦旗| 古蔺县| 古田县| 广宗县| 博白县| 潞城市| 新丰县| 定陶县| 海阳市| 唐河县| 遂宁市| 宁远县| 察哈| 宣武区| 东港市| 武安市| 牙克石市| 泰兴市| 喀喇| 泰宁县| 彭水| 新乡县| 海南省| 株洲市| 鄂托克前旗| 屯留县| 马公市|