關(guān)于javascript原型的修改與重寫(覆蓋)差別詳解
每個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)文章
JS獲取數(shù)組中出現(xiàn)次數(shù)最多及第二多元素的方法
這篇文章主要介紹了JS獲取數(shù)組中出現(xiàn)次數(shù)最多及第二多元素的方法,涉及javascript針對數(shù)組的遍歷、排序、判斷、查詢等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
JavaScript Ajax實(shí)現(xiàn)異步通信
這篇文章主要為大家詳細(xì)介紹了JavaScript Ajax實(shí)現(xiàn)異步通信的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
利用10行js代碼實(shí)現(xiàn)上下滾動公告效果
這篇文章主要給大家介紹了關(guān)于利用10行js代碼實(shí)現(xiàn)滾動公告效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。2017-12-12
如何用JavaScript實(shí)現(xiàn)功能齊全的單鏈表詳解
這篇文章主要給大家介紹了關(guān)于如何用JavaScript實(shí)現(xiàn)功能齊全的單鏈表的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
javascript 保存文件到本地實(shí)現(xiàn)方法
本文將提供兩種方式保存圖片,大家可以根據(jù)喜歡自由選擇2012-11-11

