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

首頁 > 編程 > JavaScript > 正文

關于Javascript 的 prototype問題。

2019-11-21 02:22:54
字體:
來源:轉載
供稿:網友
prototype

1、
prototype是與Clone聯(lián)系起來的,
也就是說,當創(chuàng)建實例時,prototype會把成員clone到該Class(function)的實例上。
Detail: 最常見的幾個內置內對象里的prototype,如:Array原型有join, split方法,
當創(chuàng)建數(shù)組a時var a=[1,2],原型里的所有方法都被clone到a上。

2、this是該類的實例指針(該指針為"動態(tài)聯(lián)編")。如何理解js this的動態(tài)聯(lián)編,請參考我寫的這篇文章:http://blog.never-online.net/article.asp?id=117
當創(chuàng)建該類實例時,實例具有預先定義的所有以this.p類似的成員。也具有prototype原型里定義的成員,如果類內部定義與prototype里的一個定義相同,則不是重寫:

看這個例子,jsclass定義的this.func,還有prototype里定義的func,如果jsclass內部有成員與原型里的相同,實例化時優(yōu)先權為this.func,但注意,原型里并不是重寫func,而是jsclass實例共有的,雖然其優(yōu)先權沒有this.func高,與此同時,我們也可以以這種方式來理解prototype與類內部定義成員:

<script>
function jsclass() {
  this.p = "never-online";
  this.func = function () {
    alert('func');
  }
}
jsclass.prototype = {
  func : function () {
  alert(this.p);
  }
}
var a = new jsclass();
a.func();
delete a.func;
a.func();
</script>

我們再把上面的代碼修改一下。這樣看:
<script>
function jsclass() {
  this.p = "never-online";
  this.func = function () {
    alert('func');
  }
}
jsclass.prototype = {
  func : function () {
  alert(this.p?this.p:'no value');
  }
}
var a = new jsclass();
a.func();//調用內部成員
delete a.func;//此處刪除是的類內部定義的func
a.func();//調用prototype成員
delete a.func;//試圖再次刪除func(prototype)
a.func();//刪除無效(內部的func已經被刪除),依然可打印輸出
</script>

注釋:類內部的成員可以用delete刪除,而原型里定義的,則不能用delete 實例名.成員名來刪除的。
如果用prototype定義后,實例化時:用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象
也就是在上面的
delete a.func;//此處刪除是的類內部定義的func
a.func();//調用prototype成員
之后,再次調用a.func(),調用時,通過調用prototype.func來實現(xiàn)的。而并非a.func(),這也解釋了為什么在jsclass內部定義func與在prototype定義func時不會有重寫現(xiàn)象。 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 青川县| 龙泉市| 达尔| 胶州市| 刚察县| 西乌| 伊金霍洛旗| 斗六市| 永兴县| 永康市| 上虞市| 如皋市| 曲松县| 松阳县| 象山县| 麟游县| 平邑县| 司法| 砀山县| 太白县| 枣庄市| 张家口市| 准格尔旗| 宁安市| 饶阳县| 仁寿县| 海安县| 资中县| 石楼县| 揭东县| 五常市| 道孚县| 肃宁县| 南乐县| 星座| 红河县| 临澧县| 沙洋县| 临沂市| 宜兰县| 广汉市|