带有.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";
}