JS 繼承和閉包

2021-06-28 09:58:20 字數 1917 閱讀 5940

一、原型鏈進行繼承

1.js的繼承主要依靠原型鏈來實現,使函式的原型指向另一函式的例項,依次來完成繼承,其實質就是重寫原型物件。

繼承後屬性和方法的依照原型鏈進行搜尋,1)先在例項中搜尋,2)搜尋subtype.prototype,3)搜尋supertype.prototype,直到找到該方法或者該屬性。

所有函式的預設原型是object例項。

2.確認原型和例項的關係

instanceof操作符和isprototypeof()方法

3.例子:原型的定義與方法的重寫,一定要先定義原型,再給原型新增或者重寫方法,這與先指定原型再建立物件是一樣的道理,否則方法中存在的指向原先原型的指標會失效,導致呼叫方法失敗(undefined)。

4.原型鏈在繼承所面臨的問題:如果原型中的某一屬性為引用型別,則通過例項對該屬性的修改將會影響到所有該型別的例項。

inputeles.item(1).οnclick=function();

subtype.prototype.getcolors=function();

function subtype(){};

//繼承

subtype.prototype=new suptype();

var instance1=new subtype();

instance1.colors.push("black");//"red","green","yellow","black"

alert(instance1.colors);

var instance2=new subtype();

alert(instance2.colors);//"red","green","yellow","black"

};

原型繼承的第二個問題是不能想他所繼承的父類中傳參,無法自定義的構造其父類。

二、借用建構函式進行繼承

inputeles.item(2).οnclick=function();

function subtype(name,age);

var instance1=new subtype("nicholas",24);

alert(instance1.name+","+instance1.age);

};

但是呼叫構造器進行繼承面臨的問題同樣很明顯,每個例項中方法都是不同的,方法的復用無從談起。

三、組合繼承:

js的繼承中,一般屬性使用構造器進行繼承,而方法則通過原型鏈進行繼承。

對於構造亦是同理。

inputeles.item(3).οnclick=function();			

suptype.prototype.sayname=function();

//屬性的繼承

function subtype(name,age);

//方法的繼承要採用原型鏈

//首先重寫原型,指明屬性採用原型鏈進行構造

subtype.prototype=new suptype();

subtype.prototype.constructor=subtype;

var instance1=new subtype();

var instance2=new subtype();

alert("兩個例項物件中的方法是否為同乙個方法:"+(instance1.sayname==instance2.sayname));//true

instance1.colors.push("black");

alert(instance1.colors);//"red","green","yellow","black"

alert(instance2.colors);//"red","green","yellow"

};

閉包和繼承

開闢乙個儲存空間把函式體內的 一模一樣的放在這個空間內 不解析變數 把儲存空間的位址給函式名 按照函式名的位址找到函式的儲存空間形參賦值 預解析將函式儲存空間中的 拿出來執行 才解析變數 按照函式名的位址找到函式的儲存空間 形參賦值 預解析在記憶體中開闢乙個執行空間 將函式儲存空間中的 拿出來在剛剛...

閉包和繼承

function fn var fun fn fun fun 1.延長的變數的宣告週期 2.保護了私有的變數 3.函式的作用域一直沒有被銷毀 缺點 容易造成記憶體的溢位 function father function son var f new father son.prototype f var...

js12 閉包,原型,繼承

var cat function return function this.setage function age alert new cat add 1,2 3,new的時候函式會執行一次 alert newcat age 12 new cat setage 100 alert new cat a...