欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2016年12月15日 09:37:37   作者:小小小小小亮  
這篇文章主要介紹了javascript基于原型鏈的繼承及call和apply函數(shù)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了javascript中繼承的概念、創(chuàng)建方法以及call和apply函數(shù)的功能與使用技巧,需要的朋友可以參考下

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

1. 繼承是面向?qū)ο缶幊陶Z(yǔ)言的一個(gè)重要特性,比如Java中,通過(guò)extend可以實(shí)現(xiàn)多繼承,但是JavaScript中的繼承方式跟JAVA中有很大的區(qū)別,JS中通過(guò)原型鏈的方式實(shí)現(xiàn)繼承。

(1)對(duì)象的原型:因?yàn)镴S中,函數(shù)也是對(duì)象,因此我們先從對(duì)象出發(fā)。什么是對(duì)象的原型,原型的定義為:

所有通過(guò)對(duì)象直接量創(chuàng)建的對(duì)象都具有同一個(gè)函數(shù)原型,并且可以通過(guò)Object.prototype獲得對(duì)原型對(duì)象的引用,通過(guò)關(guān)鍵字new和構(gòu)造函數(shù)調(diào)用創(chuàng)建的對(duì)象的原型就是構(gòu)造函數(shù)的prototype屬性的值。

注:沒(méi)有原型的對(duì)象不多,Object.prototype對(duì)象是沒(méi)有原型的。

(2)創(chuàng)建對(duì)象的原型

比如這里有一個(gè)Student對(duì)象和一個(gè)Person對(duì)象,其中,Student.prototype指向Person.prototype

對(duì)于創(chuàng)建對(duì)象完全不同的兩種方法:

i)Student.prototype=Person.prototype

這種方法,創(chuàng)建Student的prototype對(duì)象,如果改變Student.prototype的值的時(shí)候,Person.prototype也會(huì)同時(shí)改變,為了避免這種情況,我們應(yīng)采用其他方式;

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

這種方法,創(chuàng)建的Student的Prototype對(duì)象,在改變Student.prototype的屬性或者方法時(shí),不會(huì)同時(shí)去改變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);//輸出1
osp.x=2;
alert(osp.x);//輸出2

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

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

2. 舉一些對(duì)象中繼承的例子

(1)我們學(xué)過(guò)可以用instanceof來(lái)進(jìn)行類(lèi)型判斷,instanceof方法本來(lái)就是基于原型鏈的。

比如例3:

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

這個(gè)例子說(shuō)明Array.prototype也是繼承于對(duì)象而來(lái)。

(2)函數(shù)中的組合繼承問(wèn)題

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函數(shù)和apply函數(shù)

call函數(shù)和apply函數(shù)用于改變函數(shù)中this的指向,用于對(duì)象A調(diào)用對(duì)象B的方法,call函數(shù)和apply函數(shù)的區(qū)別在于傳參的類(lèi)型不同,apply(x,y),x表示的是執(zhí)行函數(shù)的對(duì)象,而y則表示執(zhí)行函數(shù)所需要調(diào)用的參數(shù),是一個(gè)數(shù)組,并且可以傳參為argument數(shù)組,而call(x,y)中的y之后的變量則是實(shí)實(shí)在在的變量;

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript中json操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JavaScript獲取地址欄參數(shù)的方法實(shí)現(xiàn)

    JavaScript獲取地址欄參數(shù)的方法實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于JavaScript獲取地址欄參數(shù)的方法實(shí)現(xiàn),項(xiàng)目中經(jīng)常遇到獲取上個(gè)頁(yè)面跳轉(zhuǎn)過(guò)來(lái)獲取當(dāng)前的參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • WebSocket的通信過(guò)程與實(shí)現(xiàn)方法詳解

    WebSocket的通信過(guò)程與實(shí)現(xiàn)方法詳解

    這篇文章主要給大家愛(ài)介紹了關(guān)于WebSocket的通信過(guò)程與實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-04-04
  • JavaScript實(shí)現(xiàn)簡(jiǎn)單鐘表時(shí)鐘

    JavaScript實(shí)現(xiàn)簡(jiǎn)單鐘表時(shí)鐘

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單鐘表時(shí)鐘,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • javascript學(xué)習(xí)小結(jié)之prototype

    javascript學(xué)習(xí)小結(jié)之prototype

    本系列博文主要談一些在 javascript 使用中經(jīng)常會(huì)混淆的高級(jí)應(yīng)用,包括: prototype, closure, scope, this關(guān)鍵字. 對(duì)于一個(gè)需要提高自己javascript水平的程序員,這些都是必須要掌握的,本節(jié)主要介紹prototype.
    2015-12-12
  • 用js實(shí)現(xiàn)放大鏡效果

    用js實(shí)現(xiàn)放大鏡效果

    這篇文章主要為大家詳細(xì)介紹了用js實(shí)現(xiàn)放大鏡效果,利用背景圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • js獲取提交的字符串的字節(jié)數(shù)

    js獲取提交的字符串的字節(jié)數(shù)

    js計(jì)算字符串的字節(jié)數(shù)的代碼
    2009-02-02
  • javascript動(dòng)畫(huà)算法實(shí)例分析

    javascript動(dòng)畫(huà)算法實(shí)例分析

    這篇文章主要介紹了javascript動(dòng)畫(huà)算法,實(shí)例分析了javascript實(shí)現(xiàn)動(dòng)畫(huà)效果的實(shí)現(xiàn)及使用技巧,需要的朋友可以參考下
    2015-07-07
  • JavaScript判斷瀏覽器版本的方法

    JavaScript判斷瀏覽器版本的方法

    這篇文章主要介紹了JavaScript判斷瀏覽器版本的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • JS獲取當(dāng)前使用的瀏覽器名字以及版本號(hào)實(shí)現(xiàn)方法

    JS獲取當(dāng)前使用的瀏覽器名字以及版本號(hào)實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇JS獲取當(dāng)前使用的瀏覽器名字以及版本號(hào)實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • 網(wǎng)易JS面試題與Javascript詞法作用域說(shuō)明

    網(wǎng)易JS面試題與Javascript詞法作用域說(shuō)明

    Javascript函數(shù)在定義它們的作用域里運(yùn)行,而不是在執(zhí)行它們的作用域里運(yùn)行。
    2010-11-11

最新評(píng)論