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

首頁 > 編程 > JavaScript > 正文

javascript基于原型鏈的繼承及call和apply函數用法分析

2019-11-19 18:28:32
字體:
來源:轉載
供稿:網友

本文實例講述了javascript基于原型鏈的繼承及call和apply函數用法。分享給大家供大家參考,具體如下:

1. 繼承是面向對象編程語言的一個重要特性,比如Java中,通過extend可以實現多繼承,但是JavaScript中的繼承方式跟JAVA中有很大的區別,JS中通過原型鏈的方式實現繼承。

(1)對象的原型:因為JS中,函數也是對象,因此我們先從對象出發。什么是對象的原型,原型的定義為:

所有通過對象直接量創建的對象都具有同一個函數原型,并且可以通過Object.prototype獲得對原型對象的引用,通過關鍵字new和構造函數調用創建的對象的原型就是構造函數的prototype屬性的值。

注:沒有原型的對象不多,Object.prototype對象是沒有原型的。

(2)創建對象的原型

比如這里有一個Student對象和一個Person對象,其中,Student.prototype指向Person.prototype

對于創建對象完全不同的兩種方法:

i)Student.prototype=Person.prototype

這種方法,創建Student的prototype對象,如果改變Student.prototype的值的時候,Person.prototype也會同時改變,為了避免這種情況,我們應采用其他方式;

ii)Student.prototype=Object.create(Person.prototype)

這種方法,創建的Student的Prototype對象,在改變Student.prototype的屬性或者方法時,不會同時去改變Person.prototype的屬性。

(3)基于繼承的賦值操作

例1:

var o={  x:1}o.x=2;alert(o.x);//輸出o.x=2

例2:

var o={  x:1}var osp=Object.create(o);alert(osp.x);//輸出1osp.x=2;alert(osp.x);//輸出2

i)從上面的兩個例子中,我們大概可以看出來,如果對象osp上有x屬性,那么無論是取值,還是賦值,都是基于osp對象上的直接屬性x,如果osp對象上沒有x屬性,那么會沿著prototype原型鏈查找,直到找到一個包含x屬性的prototype屬性鏈上的對象,如果osp對象所有prototype原型鏈上都沒有包含x屬性,那么返回underfined。

ii)o對象屬性的賦值,被視為在osp對象上直接進行,不會影響原型鏈上的屬性。比如上例中的osp.x=2的賦值是在osp對象上,不會影響osp的原型對象o。

2. 舉一些對象中繼承的例子

(1)我們學過可以用instanceof來進行類型判斷,instanceof方法本來就是基于原型鏈的。

比如例3:

[1,2] instanceof Array    //返回true
[1,2] instanceof Object   //返回true

這個例子說明Array.prototype也是繼承于對象而來。

(2)函數中的組合繼承問題

function student(name,age){  this.name=name;  this.age=age;}student.prototype.age=function(){  return this.age;}function beststudent(name,age){  student.call(this,age);  return this.name;}beststudent.prototype=new student();  alert(beststudent("yu",2))//輸出2}

3. call函數和apply函數

call函數和apply函數用于改變函數中this的指向,用于對象A調用對象B的方法,call函數和apply函數的區別在于傳參的類型不同,apply(x,y),x表示的是執行函數的對象,而y則表示執行函數所需要調用的參數,是一個數組,并且可以傳參為argument數組,而call(x,y)中的y之后的變量則是實實在在的變量;

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript中json操作技巧總結》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岫岩| 吴桥县| 遵化市| 轮台县| 繁峙县| 珠海市| 孟村| 四川省| 达州市| 彝良县| 阿拉善左旗| 沐川县| 玉溪市| 潍坊市| 枞阳县| 闻喜县| 双桥区| 固原市| 洛川县| 平舆县| 昌江| 灵寿县| 扎兰屯市| 永仁县| 安图县| 湖南省| 久治县| 化德县| 溧阳市| 黄骅市| 佛冈县| 梁平县| 东莞市| 祁门县| 南投县| 林芝县| 北京市| 鄂尔多斯市| 马尔康县| 常熟市| 五原县|