亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Js調用模式

標簽:
JavaScript

js中,一共4中调用方式。需要注意的是,调用方式中,this的指向问题。

函数调用模式

this丢失,debug会提示未定义相应属性。按照规范,需要将this赋值给that

let myObj = {    value : 1,    double : function(){        let that = this
        let _ = function (){
            that.value = that.value *2
            // this.value = this.value *2 // 内部函数的this被绑定错误值
        }
        _() // 函数调用模式
    }
}

myObj.double() // 方法调用模式console.log(myObj.value) // 输出2

方法调用模式

函数调用模式中的myObj.double()就是方法调用模式,这时,这个函数被保存为对象的一个属性

构造器调用模式

通过new来声明,this会被绑定到一个连接prototype的新对象。结合原型链,可以实现很多有趣用法。

function Myobj(value){ // 注意命名规范
    this.value = value
}

Myobj.prototype.getValue = function(){    return this.value
}let myobj = new Myobj(1) // 构造器调用console.log(myobj.getValue())

apply调用模式

apply:为了动态改变this而出现。结合闭包,可以更方便的实现原型继承

基于上面的例子,我们首先将getValue方法放入单独的文件./util.js下。

./util.js

exports =  module.exports = function getValue(arg){    return `${this.value} \n我是参数:${arg} `}

然后再在需要的文件中引入:

'use strict'function Myobj(value){    this.value = value
}
Myobj.prototype.getValue = function(arg){    return require('./util').apply(this,[arg]) // apply调用模式}let myobj = new Myobj(1)console.log(myobj.getValue(-1))

如此,优美地实现了组件化,代码逻辑和架构变得更加清晰。

关于applycall

相同点:

  • 作用一样:动态改变this

不同点:

  • apply调用方式:func.apply(obj,[arg1,arg2,...]),接受数组参数

  • call调用方式:func.call(obj,arg1,arg2,...),接受连续参数



作者:godbmw
链接:https://www.jianshu.com/p/035f72a48d49


點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消