Js调用模式

作者: 心谭 | 来源:发表于2018-06-02 22:44 被阅读18次

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,...),接受连续参数

欢迎技术交流,引用请注明出处。
个人网站:Yuan Xin
Github:godbmw

相关文章

  • JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式...

  • Js调用模式

    在js中,一共4中调用方式。需要注意的是,调用方式中,this的指向问题。 函数调用模式 this丢失,debug...

  • JS函数调用

    js 里函数调用有4种模式:方法调用、正常函数调用、构造器函数调用、apply/call 调用。无论哪种函数调用除...

  • this

    this this在面向对象编程过程中非常重要,它的值取决于调用模式。 在js中一共有四种调用模式:方法调用模式、...

  • js里函数调用的四种模式

    js 里函数调用有4种模式:方法调用、正常函数调用、构造器函数调用、apply/call调用。同时,无论哪种函数调...

  • js的this指向总结

    this对象 js严格模式下没有window 一、普通函数 非严格模式 普通函数全局调用和局部调用都是指向wind...

  • JS this指向

    一、js中的四种调用模式s 构造函数调用:new Foo(); 对象方法调用:o.method(); 函数直接调用...

  • js中this指向与apply、call、bind

    this this是js函数的内部属性,指向当前执行代码的环境对象 一般函数调用模式 对象方法调用模式 将对象的方...

  • JS与OC交互

    JS调用OCOC调用JS JS与OC 相互调用 //网页加载完成调用此方法

  • 记踩坑:两个this的小坑

    JS里的this有几大原则: 谁调用,this就指向谁 没人调用指向window(非严格模式下) apply ca...

网友评论

    本文标题:Js调用模式

    本文链接:https://www.haomeiwen.com/subject/buddsftx.html