Javascript object.call的参数是什么?

时间:2016-10-19 00:19:20

标签: javascript oop inheritance constructor

如果这是一个重复的话,我不知道其他人如何看待这个问题

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

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

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

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

来自mozilla:

"参数

thisArg 这个值为乐趣召唤提供了。请注意,这可能不是方法看到的实际值:如果方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,并且原始值将转换为对象。 arg1,arg2,... 对象的参数。 返回值

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

示例:

import json

with open("test.txt") as f:
    mydict = json.loads('{{ {} }}'.format(f.read()))

2 个答案:

答案 0 :(得分:1)

  

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

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

function A(r_a){
    this.r = r_a;
}

function B(r_b){
    A.call(this, r_b)
}

var b = new B(1)

1传递给Br_b可以call传递,A方法将其传递到r_a的{​​{1}}作为b.r参数,最终在rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0 ) 属性中。

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

答案 1 :(得分:0)

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

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

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

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

结果:

  

“Hello World!”

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

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

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

你不能做的原因:

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

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