【问题标题】:Javascript What are the arguments for object.call?Javascript object.call 的参数是什么?
【发布时间】:2017-02-28 10:14:06
【问题描述】:

如果这是重复的,我不知道其他人是如何回答这个问题的

所以我开始学习 js 中的 oop。这是我的第一语言。在这三个元素中,我决定开始学习继承。我似乎已经掌握了从其他对象继承的对象,尽管我还没有将它应用于任何编码挑战。

但问题是:我尝试学习从构造函数继承的构造函数,我了解到你需要 object.call()。

根据 Mozila.developer,这是一个提供的参数。我假设我不必担心。

但我对这之后的论点做了什么感到困惑。

来自Mozilla:

"参数

thisArg 这为有趣的呼吁提供了价值。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,null 和 undefined 将被替换为全局对象,原始值将转换为对象。 参数 1,参数 2,... 对象的参数。 返回值

使用指定的 this 值和参数调用函数的结果。"

例子:

function a(r){
    this.r = r;
}

function b(r){
    a.call(this, .....)
}

b.prototype = object.create(a.prototype);

【问题讨论】:

标签: javascript oop inheritance constructor


【解决方案1】:

.call() 调用您调用它的函数。传递给它的第一个参数在该函数内变为this。其余的作为函数参数传递。简单例子:

function callMe(param1, param2) {
  console.log(param1 + this.separator + param2);
}

callMe.call({ separator: ' ' }, 'Hello', 'world!'

所以对象{ separator: ' ' } 设置为this,'Hello' 和'world!'以param1param2 的形式传递给callMe

结果:

“你好,世界!”


所以在你的例子中,你可能想要这样做:

function b(r){
  a.call(this, r)
}

它只会调用a() 函数并将参数r 转发给它。


你不能随便做的原因:

function b(r) {
  a(r);
}

a() 中的this 上下文是错误的。在此处使用.call() 会在调用a() 时保留this 上下文,因此b()a() 都使用相同的this 上下文执行。

【讨论】:

    【解决方案2】:

    但是我对这之后的论点做了什么感到困惑。

    thisArg 之后的参数被一一传递给被调用的函数。在您的示例中:

    function A(r_a){
        this.r = r_a;
    }
    
    function B(r_b){
        A.call(this, r_b)
    }
    
    var b = new B(1)
    

    1 被传递给B,它可以作为r_b 使用,它通过call 方法传递到A,它可以作为r_a 参数使用并最终在b.r 属性。

    您可以通过这种方式传递任意多个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2014-02-18
      相关资源
      最近更新 更多