Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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
Javascript如何从;“超级级”;至“a”;儿童班;_Javascript_Oop_Object_Inheritance_Constructor - Fatal编程技术网

Javascript如何从;“超级级”;至“a”;儿童班;

Javascript如何从;“超级级”;至“a”;儿童班;,javascript,oop,object,inheritance,constructor,Javascript,Oop,Object,Inheritance,Constructor,我很清楚javascript不是一种基于类的语言 下面是我们在JavaScript中进行继承的一个例子: 职能人员(姓名、年龄){ this.name=名称; 这个。年龄=年龄; } Person.prototype.introductself=函数(){ log(“我的名字是“+this.name+”,我是“+this.age”); } 职能员工(姓名、年龄、员工ID){ 人称(此、姓名、年龄); this.employeeID=employeeID; } Employee.prototyp

我很清楚javascript不是一种基于类的语言

下面是我们在JavaScript中进行继承的一个例子:

职能人员(姓名、年龄){
this.name=名称;
这个。年龄=年龄;
}
Person.prototype.introductself=函数(){
log(“我的名字是“+this.name+”,我是“+this.age”);
}
职能员工(姓名、年龄、员工ID){
人称(此、姓名、年龄);
this.employeeID=employeeID;
}
Employee.prototype=Object.create(Person.prototype);
Employee.prototype.sayEmployeeID=函数(){
console.log('我的员工ID是:'+这个.employeeID);
}
var joe=新员工('joe',22,42);
joe.introductself()//返回:我叫joe,今年22岁
joe.sayEmployeeID()//返回:我的员工ID是:42
我知道它正在调用
Person
函数,而
this
Employee

您是否也了解“员工中的上下文”是什么?它是
new
操作符在运行构造函数的主体(
new Employee
中的
Employee
)之前创建的新实例,即结果对象。有关详细信息,请参阅

现在还不清楚这些属性是如何到达结果对象的。“引擎盖下”到底发生了什么

属性由指定创建:

this.name = name;
this.age = age;
…
this.employeeID = employeeID;

同样,
引用生成的对象。在前两种情况下,因为显式地用于
Person
,在后一种情况下,因为
new
用于
Emloyee

,在对象的方法中,
上下文属于对象的上下文。对于
Person
,它是一个
instanceof函数
,它将
上下文绑定到全局上下文(客户端JavaScript中的
窗口
)。
new
实例创建一个
new
(独立于它的原型继承之外)对象,并且
上下文绑定到它<如果未指定返回值,则代码>新建实例也会返回此。这也应该解释为什么EventListener中的
This
上下文附加到它所属的对象。。。元素


为了菊花链你的实例方法,通常的做法是
返回这个在它们内部

我建议投入大量时间研究JavaScript闭包@Kris,这与闭包无关,它只是javascript的本质,它在“动态”
这个
指针上运行,让那些不理解它的人发疯。这就是为什么可以在javascript中“借用”函数,常见的流行模式是
Array.prototype.slice.call(nodeList)
在添加
数组之前,将
节点列表
转换为数组。从
这是因为当
新的
员工
实例被称为
被称为宽度时,
这个
绑定到
员工
的实例@PHPglue,我知道它发生的原因,但不清楚这些属性是如何添加到实例中的。如果要将代码复制并粘贴到JS控制台中,只需运行
Person.call(此'window',1)
将不会导致
name
age
属性添加到窗口中。只有在构造函数的上下文中调用时,结果对象才具有另一个构造函数/objectIt的属性<代码>人员呼叫(此“窗口”,1);console.log(名称)您将获得
窗口
这个
是在这样的全局上下文中。