9.對(duì)象的原型,原型鏈call,apply

__proto__ 前面兩杠后面兩杠,這種命名叫隱式命名。一般是系統(tǒng)定義的,盡量不要去修改。

_this 在開發(fā)過程中,這種前面加一個(gè)下劃線的規(guī)則,一般表示私有的,就是別人私有定義的,讓其他人不要隨意動(dòng)。

Preson.prototype.name = 'old_prototypr'

function Preson(){

? ? ? ? //var this : {

? ? ? ? ? ? ? ? //? __proto__ : Preson.prototype? 在new Preson()創(chuàng)建新對(duì)象的時(shí)候,不僅會(huì)隱式執(zhí)行之前說的構(gòu)造函數(shù)產(chǎn)生新對(duì)象的那三步,還會(huì)在this中隱式定義一個(gè)屬性__proto__,這個(gè)屬性的屬性就是指向原型Preson.prototype。當(dāng)對(duì)象本身沒有某個(gè)屬性的時(shí)候,它就會(huì)到這個(gè)屬性所指向的這個(gè)值上面去找。

????????}

}

var obj = {

? ? name:'new_prototype'

}

preson.__proto__ = obj;? //這樣子preson的原型就被修改了,就是說__proto__是可以被修改的,不一定非得指向Preson.prototype。因?yàn)橹挥性趎ew 的時(shí)候產(chǎn)生隱式的那三步。

注意:Object.prototype是所有原型鏈的終端,Object.prototype.__proto__-->null

創(chuàng)建對(duì)象的方法:

1.對(duì)象字面量-->var obj = {}

2.構(gòu)造函數(shù)-->var obj1 = new Object();

3.Object.create()-->var obj2 = Object.create('原型');

/--------------------------------------方法三-------------------------------------/

Preson.prototype.name = "xxx";

function Preson(){}

var ?preson = Object.create(Preson.prototype);

/----------------------------------------------------------------------------/

絕大多數(shù)的對(duì)象最終都會(huì)繼承自O(shè)bject.prototype,但是Object.create(原型),里面的Object.create(null)沒有原型。

undefined和null不能調(diào)用toString方法,因?yàn)樗鼈兙褪窃贾?,它們沒有原型也不是對(duì)象,所以不能進(jìn)行包裝類,但是number和string還有boolean是有原型的,可以進(jìn)行包裝類,在系統(tǒng)運(yùn)行時(shí)會(huì)進(jìn)行包裝類。

123.toString()這里的點(diǎn)會(huì)被識(shí)別成浮點(diǎn)型,點(diǎn)的優(yōu)先級(jí)最高,所以會(huì)被報(bào)錯(cuò),應(yīng)該先聲明變量再將數(shù)字賦值,然后再執(zhí)行toString方法。

var num =123;

num.toString() --> new Number(num).toString();

Number.prototype.toString = function(){}所以num.toString()本質(zhì)上是調(diào)用的原型上面的這個(gè)toString方法

Number.toString.__proto__ = Object.prototype所以按照原型鏈上查找,當(dāng)找到toString方法就會(huì)直接調(diào)用,而不是報(bào)錯(cuò)

如果原型上面本身有某一個(gè)方法,而我們又人為的在對(duì)象本身上面添加了一個(gè)名字一樣但是功能不一樣的方法,這叫做重寫,即覆蓋原型上的方法,其實(shí)就是當(dāng)在原型鏈上面查找的時(shí)候,在自身找到了,就不會(huì)再到原型上去找了,相當(dāng)于截?cái)嗔艘粯印?/p>

對(duì)于浮點(diǎn)數(shù) ?前16位 ? ?后16位計(jì)算是精準(zhǔn)的,但是超過以后,就是前面的計(jì)算不準(zhǔn),后面的會(huì)用科學(xué)計(jì)數(shù)法表示。

function Preson(name , age){

? ? this.age = age;

????this.name = name;

}

var preson = new Preson("hh" , 18)

var obj = {name:'xyz'}

Preson.call(obj , '葉子' , 18);

可以試一下打印obj看顯示的是什么?

/--------------------------------------------call和apply-----------------------------------------------/

call和apply的作用就是改變this指向,但是由此導(dǎo)出一個(gè)功能就是借用別人的函數(shù)改變自己函數(shù)的功能。

function Preson(name,age,sex){

this.name = name;

this.age = age;

this.sex = sex;

}

function Student(name,age,sex,tel , grade){

//var this = {}

this.tel = tel;

this.grade = grade;

Preson.call(this,name,age,sex);

}

var student = new Student('yx',18,'women','...',99);?

apply的用法同call,但是call需要將實(shí)參按順序傳進(jìn)去,而apply只需要傳一個(gè)arguments,apply只接受兩位參數(shù),第一位都是一樣的。

改變this指向,傳參列表不同。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在JavaScript中,原型鏈作為一個(gè)基礎(chǔ),老生長(zhǎng)談,今天我們就來深入的解讀一下原型鏈。 本章主要講的是下面幾點(diǎn)...
    Devinnn閱讀 1,496評(píng)論 1 6
  • 大家好,我是IT修真院深圳分院第01期學(xué)員,一枚正直純潔善良的web程序員。 今天給大家分享一下,修真院官網(wǎng)JS(...
    老菜菜閱讀 2,597評(píng)論 0 1
  • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
    舟漁行舟閱讀 8,110評(píng)論 2 17
  • 目錄 導(dǎo)語(yǔ) 1.理解對(duì)象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對(duì)象的方式 3.JavaScript的繼承機(jī)制 3.1 原型...
    犯迷糊的小羊閱讀 879評(píng)論 0 4
  • 公司是一家農(nóng)資代理公司,產(chǎn)品資源較為豐富,一個(gè)總經(jīng)理一副經(jīng)理,財(cái)務(wù)二名。有三個(gè)業(yè)務(wù)經(jīng)理負(fù)責(zé)二塊業(yè)務(wù),典型的一家以銷...
    24d60a335890閱讀 227評(píng)論 0 0

友情鏈接更多精彩內(nèi)容