国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

詳談js原型繼承的一些問題

來源:懂視網 責編:小采 時間:2020-11-27 22:31:08
文檔

詳談js原型繼承的一些問題

詳談js原型繼承的一些問題:當我們使用原型鏈繼承時,需要謹慎的定義原型上的方法和屬性,因為這可能帶來意外的結果。 一、謹慎的定義原型上的方法。 當我們想為一個構造函數的原型上定義一個方法時,一定要在更改原型后再定義,否則新的原型對象上不會有定義的這個方法,導致與我們預期
推薦度:
導讀詳談js原型繼承的一些問題:當我們使用原型鏈繼承時,需要謹慎的定義原型上的方法和屬性,因為這可能帶來意外的結果。 一、謹慎的定義原型上的方法。 當我們想為一個構造函數的原型上定義一個方法時,一定要在更改原型后再定義,否則新的原型對象上不會有定義的這個方法,導致與我們預期

當我們使用原型鏈繼承時,需要謹慎的定義原型上的方法和屬性,因為這可能帶來意外的結果。

一、謹慎的定義原型上的方法。

當我們想為一個構造函數的原型上定義一個方法時,一定要在更改原型后再定義,否則新的原型對象上不會有定義的這個方法,導致與我們預期的結果不同。例:

function superObj(){}
superObj.prototype.sayHi=function sayHi(){
 console.log('hi');
};
superObj.prototype={
 name:'Poly'
};
var obj=new superObj();
obj.sayHi();//報錯!! superObj.sayHi is not a function

正確操作如下

function superObj(){}
superObj.prototype={
 name:'Poly'
};
superObj.prototype.sayHi=function sayHi(){
 console.log('hi');
};
var obj=new superObj();
obj.sayHi();// 'hi'

二、不要使用對象字面量給原型創建屬性/方法。

使用對象字面量,就會新創建一個對象,并把新對象的引用地址賦值給構造函數的prototype。例

function superObj(){}
superObj.prototype={
 sayHi:function sayHi(){
 console.log('hi');
 }
}

正確操作如下:

function superObj(){}
superObj.prototype.sayHi=function sayHi(){
 console.log('hi');
}

三、對象實例與原型存在直接對應關系。

意思就是說當一個對__proto__就會保存原型的引用地址,即使構造函數的prototype發生改變,也不會對之前創建的實例中的__proto__產生影響。例

function superObj(){}
superObj.prototype.say=function() {
 console.log('hello');
}
var obj=new superObj();
superObj.prototype={
 say:function() {
 console.log('world');
 }
};
var obj2=new superObj();
obj.say();//'hello'
obj2.say();//'world'

四、最好不要給原型上定義值為引用類型的屬性。

如果在原型上定義值為引用類型的屬性,那么所有實例都會共享該屬性值(引用類型值,指向同一個對象),當其中一個實例修改該引用類型上的值或屬性時,所有實例上的都會發生改變。因此值為引用類型的屬性,最好在構造函數中定義。例

function superObj(){}
superObj.prototype.ary=[1,2,3];
var obj1=new superObj();
var obj2=new superObj();
obj1.ary[0]=0;//obj1.ary和obj2.ary指向的是同一個數組,當obj1修改此數組時,obj2.ary也會發生改變
console.log(obj2.ary[0]);//0

如果不想讓實例共享同一個引用對象,那么就應該在構造函數中進行定義。例

function superObj(){
 this.ary=[1,2,3];
}
var obj1=new superObj();
var obj2=new superObj();
obj1.ary[0]=0;//obj1.ary和obj2.ary指向的不是同一個數組,所以修改obj1.ary不會影響obj2.ary
console.log(obj2.ary[0]);//1

以上這篇詳談js原型繼承的一些問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

詳談js原型繼承的一些問題

詳談js原型繼承的一些問題:當我們使用原型鏈繼承時,需要謹慎的定義原型上的方法和屬性,因為這可能帶來意外的結果。 一、謹慎的定義原型上的方法。 當我們想為一個構造函數的原型上定義一個方法時,一定要在更改原型后再定義,否則新的原型對象上不會有定義的這個方法,導致與我們預期
推薦度:
標簽: js 問題 原型
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 精品一区二区三区免费毛片爱 | 日本我不卡 | 亚洲欧美日韩高清一区二区一 | 亚洲欧美日韩精品久久久 | 国产视频一区二区三区四区 | 国产激情一区二区三区成人91 | 国产夫妻精品 | 欧美一级久久久久久久大片 | 欧洲一区二区三区在线观看 | 国产欧美日韩精品在钱 | 亚洲欧美日本另类 | 国产精品久久毛片蜜月 | 久久er99热精品一区二区 | 一区高清 | 91久久精品一区二区三区 | 久国产精品视频 | 日韩欧美国产中文字幕 | 精品二区| 欧美一区二区三区视频 | 在线观看亚洲一区 | a国产成人免费视频 | 国产 欧美 日韩 在线 | 国内偷拍第一页 | 与子乱刺激对白在线播放 | 国产中的精品一区的 | 国产精品亚洲四区在线观看 | 日本伊人久久 | 国产精品久久久久久久午夜片 | 欧美日韩精品免费一区二区三区 | 亚洲第一区视频在线观看 | 91av一区| 国产手机精品自拍视频 | 亚洲欧美一区二区三区国产精品 | 国产精品亚洲一区二区三区久久 | 亚洲 欧美 中文字幕 | 亚洲欧美中文日韩综合 | 欧美亚洲综合图区在线 | 欧美日韩国产色 | 日本久久精品免视看国产成人 | 国产在线视频资源 | 国产精品久久二区三区色裕 |