最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年08月31日 09:18:10   投稿:jingxian  
下面小編就為大家?guī)硪黄P(guān)于javascript原型的修改與重寫(覆蓋)差別詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

每個JavaScript函數(shù)都有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();//person
animal.say();//Uncaught TypeError: undefined is not a function

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

 

function Person()
{
}

function Animal()
{

}

var person = new Person();
var animal = new Animal();
alert(person.__proto__ === Person.prototype);//true
alert(animal.__proto__ === Animal.prototype);//true

// 修改原型
Person.prototype.say = function(){
	alert("person");
}

// 修改原型
Animal.prototype = {
	say : function(){
		alert("person");
	}
}

alert(person.__proto__ === Person.prototype);//true
alert(animal.__proto__ === Animal.prototype);//false

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

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

相關(guān)文章

最新評論

浑源县| 甘德县| 宁夏| 贵德县| 米易县| 锡林郭勒盟| 开化县| 衢州市| 蓬溪县| 芦溪县| 凤冈县| 马鞍山市| 平山县| 龙游县| 绥德县| 泰州市| 临城县| 奈曼旗| 湖北省| 左云县| 河池市| 宝山区| 句容市| 盘锦市| 泌阳县| 朔州市| 安化县| 罗平县| 抚松县| 无极县| 厦门市| 利辛县| 云霄县| 绿春县| 新兴县| 东台市| 乡宁县| 高州市| 桂阳县| 汉沽区| 精河县|