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

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

js使用原型對(duì)象(prototype)需要注意的地方

2024-05-06 15:12:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們先來(lái)一個(gè)簡(jiǎn)單的構(gòu)造函數(shù)+原型對(duì)象的小程序

function CreateObj( uName, uAge ) {      this.userName = uName;      this.userAge = uAge;    }    CreateObj.prototype.showUserName = function () {      return this.userName;    }    CreateObj.prototype.showUserAge = function () {      return this.userAge;    }

這個(gè)程序,沒有什么問(wèn)題,但是非常的冗余,每次擴(kuò)展一個(gè)方法,都要寫一次原型對(duì)象,我們可以把原型對(duì)象prototype當(dāng)做一個(gè)字面量對(duì)象,所有的方法都在字面量對(duì)象中擴(kuò)展,可以達(dá)到同樣的效果:

CreateObj.prototype = {      showUserAge : function(){        return this.userAge;      },      showUserName : function(){        return this.userName;      },    }    var obj1 = new CreateObj( 'ghostwu', 22 );    var obj2 = new CreateObj( '衛(wèi)莊', 24 );    console.log( obj1.showUserName(), obj1.showUserAge() ); //ghostwu 22    console.log( obj2.showUserName(), obj2.showUserAge() ); //衛(wèi)莊 24

但是這種原型(prototype)對(duì)象的寫法,屬于重寫了CreateObj的默認(rèn)原型對(duì)象,造成的第一個(gè)問(wèn)題就是constructor不再指向CreateObj.

沒有重寫之前,constructor指向CreateObj

function CreateObj( uName, uAge ) {      this.userName = uName;      this.userAge = uAge;    }    CreateObj.prototype.showUserName = function () {      return this.userName;    }    CreateObj.prototype.showUserAge = function () {      return this.userAge;    }    console.log( CreateObj.prototype.constructor === CreateObj ); //true

重寫之后,constructor指向Object

CreateObj.prototype = {      showUserAge : function(){        return this.userAge;      },      showUserName : function(){        return this.userName;      },    }    console.log( CreateObj.prototype.constructor === CreateObj ); //false    console.log( CreateObj.prototype.constructor === Object ); //true

所以說(shuō),constructor不能準(zhǔn)確的標(biāo)識(shí)對(duì)象,因?yàn)樗麜?huì)被修改

我們之前寫的程序,基本都是在原型對(duì)象(prototype)上擴(kuò)展完了方法之后,再實(shí)例化對(duì)象,我們看下,先實(shí)例化對(duì)象,再在原型對(duì)象(prototype)上擴(kuò)展函數(shù),

實(shí)例對(duì)象是否能正常的調(diào)用到擴(kuò)展的方法?

function CreateObj( uName, uAge ) {      this.userName = uName;      this.userAge = uAge;    }    var obj1 = new CreateObj( 'ghostwu', 22 );    CreateObj.prototype.showUserName = function(){      return this.userName;    }    console.log( obj1.showUserName() ); //ghostwu

可以正常調(diào)用,但是,如果原型對(duì)象是重寫的,就調(diào)用不到了

function CreateObj( uName, uAge ) {      this.userName = uName;      this.userAge = uAge;    }    var obj1 = new CreateObj( 'ghostwu', 22 );    CreateObj.prototype = {      showUserName : function(){        return this.userName;      }    }    console.log( obj1.showUserName() ); //報(bào)錯(cuò)            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 平利县| 游戏| 突泉县| 西畴县| 萍乡市| 涟水县| 舒城县| 遵化市| 东方市| 安西县| 漯河市| 巴东县| 多伦县| 河西区| 方城县| 松江区| 中西区| 阳高县| 靖宇县| 志丹县| 会昌县| 辉南县| 虹口区| 金溪县| 淅川县| 莱芜市| 潮州市| 富民县| 鲁山县| 紫金县| 通山县| 安岳县| 南溪县| 萨嘎县| 勐海县| 新绛县| 上杭县| 中牟县| 贞丰县| 延长县| 林州市|