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

首頁 > 語言 > JavaScript > 正文

javascript 寫類方式之三

2024-05-06 14:15:00
字體:
供稿:網(wǎng)友
取前面兩種的優(yōu)點:
a、用構(gòu)造函數(shù)來定義類屬性(字段)
b、用原型方式來定義類的方法。
就有了第三種方式。這種方式貌似采用的人較多。
3、綜合構(gòu)造函數(shù)/原型
代碼如下:
/**
* Person類:定義一個人,有個屬性name,和一個getName方法
* @param {String} name
*/
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
}

這樣,即可通過構(gòu)造函數(shù)構(gòu)造不同name的人,對象實例也都共享getName方法,不會造成內(nèi)存浪費。
但似乎這樣的代碼風(fēng)格似乎仍然沒有java的類那么緊湊,把屬性,構(gòu)造方法(函數(shù)),方法都包在大括號內(nèi)。
代碼如下:
public class Person {
//屬性(字段)
String name;
//構(gòu)造方法(函數(shù))
Person(String name) {
this.name = name;
}
//方法
String getName() {
return this.name;
}
}

為了讓js代碼風(fēng)格更緊湊,把掛在prototype的方法代碼移到function Person的大括號內(nèi)。
代碼如下:
function Person(name) {
this.name = name;
Person.prototype.getName = function() {
return this.name;
}
}

似乎很神奇,還能這么寫啊!驗證一下
代碼如下:
var p1 = new Person("Jack");
var p2 = new Person("Tom");
console.log(p1.getName());//Jack
console.log(p2.getName());//Tom

沒有報錯,控制臺也正確輸出了。說明可以這么寫,呵呵。
嗯,似乎很完美。
a 、可以通過傳參構(gòu)造對象實例
b 、對象實例都共享同一份方法不造成內(nèi)存浪費
c 、代碼風(fēng)格也比較緊湊
但每次new一個對象的時候都會執(zhí)行
Person.prototype.getName = function() {
return this.name;
}
造成了不必要的重復(fù)的運算。因為getName方法掛在prototype上只需執(zhí)行一次即可。只需稍微改造下:
代碼如下:
function Person(name) {
this.name = name;
if(Person._init==undefined) {
alert("我只執(zhí)行一次!");
Person.prototype.getName = function() {
return this.name;
}
Person._init = 1;
}
}

new兩個對象,
代碼如下:
var p1 = new Person("Andy");//第一次new會彈出'我只執(zhí)行一次!'
var p2 = new Person("Lily");//以后new的對象不會再執(zhí)行了

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 阳泉市| 嵩明县| 永善县| 方山县| 旬邑县| 牙克石市| 大竹县| 渝北区| 枣庄市| 成安县| 密山市| 延寿县| 麻江县| 河北区| 泾川县| 灵宝市| 乐亭县| 北碚区| 比如县| 屯门区| 阿鲁科尔沁旗| 佛山市| 延川县| 广元市| 宁明县| 庄浪县| 牡丹江市| 镶黄旗| 临汾市| 太仆寺旗| 石棉县| 沽源县| 安岳县| 陵水| 嘉定区| 信丰县| 句容市| 临泉县| 周口市| 安陆市| 宁波市|