国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 嘉禾县| 专栏| 上虞市| 西乌| 砚山县| 郧西县| 闻喜县| 红桥区| 贡觉县| 清河县| 桐庐县| 同德县| 灵武市| 威信县| 合阳县| 集安市| 高尔夫| 得荣县| 桂阳县| 于田县| 兴宁市| 博爱县| 临城县| 剑河县| 阳东县| 乐亭县| 灵璧县| 马山县| 来凤县| 瓮安县| 济南市| 禹州市| 建平县| 台南市| 高阳县| 开鲁县| 临武县| 安阳市| 晴隆县| 鄂伦春自治旗| 武定县|