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

js原型繼承的兩種方法對比介紹

 更新時(shí)間:2014年03月30日 14:25:16   作者:  
這篇文章主要介紹了js原型繼承的兩種方法對比介紹,需要的朋友可以參考下

在實(shí)際的項(xiàng)目中,我們通常都是用構(gòu)造函數(shù)來創(chuàng)建一個(gè)對象,再將一些常用的方法添加到其原型對象上。最后要么直接實(shí)例化該對象,要么將它作為父類,再申明一個(gè)對象,繼承該父類。

而在繼承的時(shí)候有兩種常用方式,今天我們就來稍作探討

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

//父類
 function Person(name){
    this.name = name;
};

 // 子類
 function Student(sex){
  Person.apply(this,arguments); //繼承父類的構(gòu)造函數(shù)
  this.sex=sex;
 };

1,繼承Prototype:

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

Student.prototype = Person.prototype; //執(zhí)行完此句時(shí),Student.prototype.constructor 指向的是Person,為什么了?因?yàn)镻erson.prototype.constructor指向Person,對象的賦值實(shí)質(zhì)上是引用賦值,所以Student.prototype.constructor也指向Person
Student.prototype.constructor = Student;  //  將Student.prototype.constructor 指回Person

用Person的原型對象來覆蓋Student的原型對象;前面說到對象的賦值實(shí)質(zhì)上是引用賦值,所以如果Student.prototype上的任何修改都會體現(xiàn)到Person.prototype中,即子類會影響父類。

看下面:

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

Student.prototype.add=function(){alert("add")};
Person.prototype.add();//彈出add

2,繼承實(shí)例:

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

Student.prototype = new Person();  //如果此處不傳遞參數(shù),可以不寫();即直接寫成 new Person;
2 Student.prototype.constructor = Student;

用Person的實(shí)例來覆蓋Student的原型對象;創(chuàng)建了實(shí)例,比起前面那種,顯示是浪費(fèi)內(nèi)存了,不過這同時(shí)也解決了上面那種方法的缺點(diǎn),即此時(shí)Student.prototype上的任何修改不會體現(xiàn)到Person.prototype中,即子類不會影響父類。

3,利用控對象來組合1和2的優(yōu)點(diǎn),去掉缺點(diǎn)

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

var  F = function(){};
F.prototype = Person.prototype;
Student.prototype  = new F();
Student.prototype.constructor  = Student;

F是個(gè)空對象,上面只有些原型方法,實(shí)例化時(shí)內(nèi)存占用較少,同時(shí)也隔離開了子類對父類的影響。

相關(guān)文章

最新評論

宣武区| 积石山| 侯马市| 辽源市| 泗洪县| 吴桥县| 沁阳市| 东城区| 武宁县| 察哈| 子长县| 磴口县| 温州市| 柳河县| 兴山县| 山东| 兴山县| 获嘉县| 准格尔旗| 印江| 威信县| 恩施市| 广德县| 噶尔县| 鸡泽县| 山阳县| 江都市| 诸暨市| 钟祥市| 伊通| 合江县| 临沂市| 县级市| 政和县| 洪江市| 吉林市| 桐乡市| 侯马市| 定日县| 抚顺市| 潞城市|