Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有.call的JavaScript继承(此)_Javascript_Inheritance - Fatal编程技术网

带有.call的JavaScript继承(此)

带有.call的JavaScript继承(此),javascript,inheritance,Javascript,Inheritance,代码来自: 输出:WorkerBee{name:,dept:“general”,项目:数组[0]} Employee.call(这个)有什么影响有吗?通过运行代码,我知道继承成功是必要的。.call()的文档只是声明 方法调用具有给定此值和提供的参数的函数 个别地 它调用构造函数Employee(),但是没有使用new操作符,也没有return返回对象及其属性。Employee.call(this)如何使子对象继承父属性 如果不使用此行,则只有项目数组作为属性存在。调用所做的只是使用给定上下文调

代码来自:

输出:
WorkerBee{name:,dept:“general”,项目:数组[0]}

Employee.call(这个)有什么影响有吗?通过运行代码,我知道继承成功是必要的。
.call()
的文档只是声明

方法调用具有给定此值和提供的参数的函数 个别地

它调用构造函数
Employee()
,但是没有使用
new
操作符,也没有
return
返回对象及其属性。
Employee.call(this)
如何使子对象继承父属性


如果不使用此行,则只有
项目
数组作为属性存在。

调用
所做的只是使用给定上下文调用函数
。在您的示例中,这意味着调用函数
Employee
,其中
this
WorkerBee
的实例。因此,在本例中发生的情况是,当执行
Employee
时,它会创建
this
对象并将其自身属性设置为此时的
WorkerBee

运行代码时检查控制台日志:

function Employee() {
    console.log(this instanceof WorkerBee);
    this.name = "";
    this.dept = "general";
}
。。。您将看到,
这个
确实指向了
WorkerBee
的对象实例


此模式用于使一个构造函数在外部主机对象(上下文)上创建自己的属性。它也被称为“借用构造函数”。

Employee
与其他函数一样,只是一个函数。当与
new
操作符一起使用时,它作用于
Employee
“type”的新分配对象,但这不是调用它的唯一方法

在您所指的场景中,它只需填写
this

Employee.call(this)的
name
dept
属性在绑定到参数的函数中运行函数
Employee
,其中包含
this
。有点令人困惑的是,参数是
this
。当
Employee.call(这个)时运行时,
是对正在使用
新建
创建的
WorkerBee
对象的引用


使用
Employee.call(this)
Employee
函数向
WorkerBee
对象添加其他属性。

这个问题基本上归结为“what does
。call
do.”。对对象调用构造函数将在构造函数定义的对象上设置自己的属性。“Employee.call(这)如何导致子对象继承父属性?”它不会继承任何内容。“如果省略这一行,则只有项目数组作为属性存在。”那么
Employee
做什么?它将
name
deps
分配给
this
。因此,我们可以得出结论,
Employee.call(this)
调用
Employee
,并将其
this
设置为新对象。也许这有助于更好地理解
.call
函数foo(){console.log(this.name);};foo.call({name:'abc'});调用({name:'xyz'})。嘿,菲利克斯。我想我是从你的解释中明白的。哦,好吧,现在说得通了。谢谢
function Employee() {
    console.log(this instanceof WorkerBee);
    this.name = "";
    this.dept = "general";
}