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

首頁 > 編程 > JavaScript > 正文

關于javascript原型的修改與重寫(覆蓋)差別詳解

2019-11-20 09:07:19
字體:
來源:轉載
供稿:網友

每個JavaScript函數都有prototype屬性(javascript對象沒有這個屬性),這個屬性引用了一個對象,這個對象就是原型對象。javascript允許我們修改這個原型對象。

修改有2種方式:

方式1:在原有的原型對象上增加屬性或者方法

function Person(){}Person.prototype.add = function(){	alert(this.name);};Person.prototype.name = "aty";var p1 = new Person();p1.add();//aty

方式2:重寫(覆蓋)原型對象

function Person(){}Person.prototype = {	add : function(){		alert(this.name);	},	name : "aty"}var p2 = new Person();p2.add();//aty

可以看到上面這2種方式都可以修改原型,那他們的差別究竟是什么呢?到底哪種方式才是推薦的的做法呢?

function Person(){}function Animal(){}var person = new Person();var animal = new Animal();// 修改原型Person.prototype.say = function(){	alert("person");}// 修改原型Animal.prototype = {	say : function(){		alert("person");	}}person.say();//personanimal.say();//Uncaught TypeError: undefined is not a function

如果是先創建對象,然后再修改原型,那么如果采用方式1,已經創建的對象能夠正確訪問修改后的原型;如果采用方式2,已經創建的對象無法訪問到修改后的原型。從這個角度來看,顯然方式1比方式2更好。為什么會這樣呢?

 

function Person(){}function Animal(){}var person = new Person();var animal = new Animal();alert(person.__proto__ === Person.prototype);//truealert(animal.__proto__ === Animal.prototype);//true// 修改原型Person.prototype.say = function(){	alert("person");}// 修改原型Animal.prototype = {	say : function(){		alert("person");	}}alert(person.__proto__ === Person.prototype);//truealert(animal.__proto__ === Animal.prototype);//false

 很顯然這與java中"修改引用"和"修改引用指向的對象"很相似,效果也是一樣的。

以上這篇關于javascript原型的修改與重寫(覆蓋)差別詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁远县| 龙江县| 秦安县| 志丹县| 柳河县| 广丰县| 阜平县| 中卫市| 福安市| 宁都县| 沂水县| 沙洋县| 德江县| 涿鹿县| 关岭| 阿拉善左旗| 藁城市| 彝良县| 马公市| 德格县| 姜堰市| 秦安县| 太仆寺旗| 嘉定区| 泸州市| 隆林| 永安市| 延川县| 衢州市| 金华市| 冀州市| 大关县| 甘谷县| 淮滨县| 巢湖市| 乌兰浩特市| 丹凤县| 南部县| 万宁市| 武乡县| 桐城市|