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

javascript教程之不完整的繼承(js原型鏈)

 更新時間:2014年01月13日 10:33:38   投稿:zxhpj  
Javascript的繼承和標(biāo)準(zhǔn)的oop繼承有很大的區(qū)別,Javascript的繼承是采用原型鏈的技術(shù),下面使用示例學(xué)習(xí)一下JS的繼承

Javascript的繼承和標(biāo)準(zhǔn)的oop繼承有很大的區(qū)別,Javascript的繼承是采用原型鏈的技術(shù),每個類都會將“成員變量”和“成員函數(shù)”放到 prototype 上,Js++都過superclass將其鏈接起來,即 C.prototype.superclass = C.superclass = P.prototype;
當(dāng) var c = new C()時,c.__proto__ = C.prototype ;
當(dāng) c訪問“成員變量”時,如果在__proto__無法獲取時,就會到C.prototype查找,如果又不存在,又會到父類的prototype查找,由于只有 __proto__ 是對象創(chuàng)建時分配的(每個對象分配),其他都是定義時分配的(每個對象共享),此時,如果訪問C.prototype中“成員變量”是對象時,不修改“成員變量”的本身,而是修改“成員變量”對象的成員時,修改的“成員變量”對象的成員就會被所有對象實例共享,這樣就違背類設(shè)計的初衷。
例如:

復(fù)制代碼 代碼如下:

'package'.j(function () {
        'class A'.j(function () {
            jpublic({
                v:{a: 1}
            });
            jprivate({
                p:{a:1}
            });
            jprotected({
                x:{a:1}
            });

        });

        'class B extends A'.j(function () {

        });
});

var b1 = new B();
b1.v.a = 5;
b1.x.a = 5;
var b2 = new B();

console.log(b1.v.a) // 輸出為 5
console.log(b1.x.a) // 輸出為 5

console.log(b2.v.a) // 輸出也為 5,并不是預(yù)想的 1
console.log(b2.x.a) // 輸出為 1
console.log(b2.p.a) // 不可用,會提示 p不存在

如何解決此問題?
A. 將 v 這樣的成員“成員變量”(其本身是對象)不在原型鏈上定義,而是在構(gòu)造函數(shù)中調(diào)用,此時,創(chuàng)建對象實例時,就會在對象的__proto__上分配。

Js++提供了類似的方法,只要在jprivate中定義的“成員變量”或“成員函數(shù)”都會分配到對象的__proto__上,且只有本實例可用, jprotected中定義的“成員變量”(其本身是對象)也會分配到對象的__proto__上,且只有繼承他的可用,

B. 原型鏈上只定義只讀的“成員變量”(其本身是對象)

C.jpublic 定義的“成員變量”(其本身是對象)中的成員,只是只讀成員,切記不可賦值,否則會在各個實例共享。

相關(guān)文章

  • 超級給力的JavaScript的React框架入門教程

    超級給力的JavaScript的React框架入門教程

    這篇文章主要介紹了JavaScript的React框架入門教程,目前React框架正被Facebook開源極力推廣中,此文強烈推薦!需要的朋友可以參考下
    2015-07-07
  • JavaScript實現(xiàn)的GBK、UTF8字符串實際長度計算函數(shù)

    JavaScript實現(xiàn)的GBK、UTF8字符串實際長度計算函數(shù)

    這篇文章主要介紹了JavaScript實現(xiàn)的GBK、UTF8字符串實際長度計算函數(shù),需要的朋友可以參考下
    2014-08-08
  • JavaScript中的分號插入機制詳細(xì)介紹

    JavaScript中的分號插入機制詳細(xì)介紹

    這篇文章主要介紹了JavaScript中的分號插入機制詳細(xì)介紹,本文講解JavaScript中各種情況下的分號插入機制,需要的朋友可以參考下
    2015-02-02
  • Javascript的閉包詳解

    Javascript的閉包詳解

    這篇文章主要介紹了Javascript的閉包詳解,需要的朋友可以參考下
    2014-12-12
  • Javascript 學(xué)習(xí)筆記之 對象篇(二) : 原型對象

    Javascript 學(xué)習(xí)筆記之 對象篇(二) : 原型對象

    Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進(jìn)行原型式繼承。盡管人們經(jīng)常將此看做是 Javascript 的一個缺點,然而事實上,原型式繼承比傳統(tǒng)的類繼承模型要更加強大。舉個例子,在原型式繼承頂端構(gòu)建一個類模型很簡單,然而反過來則是個困難得多的任務(wù)。
    2014-06-06
  • Javascript入門學(xué)習(xí)第六篇 js DOM編程

    Javascript入門學(xué)習(xí)第六篇 js DOM編程

    上篇文章納悶的問題,將在這章和以后的幾章里,慢慢搞定。 從今天起,開始學(xué)習(xí)DOM編程 讓我們慢慢稱為一名初級的js程序員。 然后往js匠人方向發(fā)展。
    2008-07-07
  • JS中switch的四種寫法示例

    JS中switch的四種寫法示例

    這篇文章主要為大家介紹了JS中switch的四種寫法示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • javascript數(shù)組詳解

    javascript數(shù)組詳解

    數(shù)組對象用來在單獨的變量名中存儲一系列的值。我們使用關(guān)鍵詞 new 來創(chuàng)建數(shù)組對象。有兩種向數(shù)組賦值的方法,也可以使用一個整數(shù)自變量來控制數(shù)組的容量
    2014-10-10
  • JavaScript mapreduce工作原理簡析

    JavaScript mapreduce工作原理簡析

    MapReduce是一個編程模型,用于作業(yè)調(diào)度,也是一個處理和生成超大數(shù)據(jù)集的算法模型的相關(guān)實現(xiàn),本文將詳細(xì)介紹JavaScript mapreduce工作原理,需要的朋友可以參考下
    2012-11-11
  • 深入document.write()與HTML4.01的非成對標(biāo)簽的詳解

    深入document.write()與HTML4.01的非成對標(biāo)簽的詳解

    本篇文章對document.write()與HTML4.01的非成對標(biāo)簽進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05

最新評論

石家庄市| 福建省| 禄丰县| 农安县| 宜城市| 姜堰市| 大洼县| 德州市| 青田县| 松江区| 聂拉木县| 云龙县| 含山县| 墨脱县| 延庆县| 大渡口区| 广东省| 屯留县| 镇平县| 文山县| 开化县| 辰溪县| 寻甸| 罗定市| 油尖旺区| 全椒县| 光山县| 黎平县| 曲阳县| 龙江县| 治县。| 宾阳县| 富裕县| 瑞昌市| 安义县| 五莲县| 潜江市| 嘉鱼县| 江安县| 阳朔县| 大丰市|