两个JavaScript类之间的差异以及prototype为什么会';我不在Emp课上工作
两个JavaScript类之间的差异以及prototype为什么会';我不在Emp课上工作,javascript,javascript-objects,Javascript,Javascript Objects,(函数(){ var Emp=函数(_名称,_薪资){ 变量名称=_名称; var工资=\u工资 返回{ 姓名:姓名,, 薪金:薪金 }; } Emp.prototype.work=函数(){ console.log('这是工作',这是); } var Car=功能(\u名称,\u型号){ this.name=\u name; this.model=\u model; } Car.prototype.drive=函数(){ log('这是驱动器',这是); } var汽车=新车(“宝马”、“20
(函数(){
var Emp=函数(_名称,_薪资){
变量名称=_名称;
var工资=\u工资
返回{
姓名:姓名,,
薪金:薪金
};
}
Emp.prototype.work=函数(){
console.log('这是工作',这是);
}
var Car=功能(\u名称,\u型号){
this.name=\u name;
this.model=\u model;
}
Car.prototype.drive=函数(){
log('这是驱动器',这是);
}
var汽车=新车(“宝马”、“2015”);
car.drive();//工作正常
var emp=新emp('peter','1234');
emp.work();//类型错误
})();代码>在关于新的
运算符的中,解释了该运算符的基本功能:
执行代码newfoo(…)时,会发生以下情况:
创建一个新对象,继承自Foo.prototype李>
使用指定的参数调用构造函数Foo,并且
将其绑定到新创建的对象。新的Foo相当于
new Foo(),即如果未指定参数列表,则调用Foo
没有争论李>
构造函数返回的对象
成为整个新表达式的结果如果构造函数
函数不显式返回在中创建的对象
而使用步骤1。(通常构造函数不返回值,
但是,如果他们想超越正常情况,他们可以选择这样做
对象创建过程。)
作为Emp
构造函数的最后一步
return {
name: name,
salary: salary
};
您“覆盖”了返回步骤1中创建的对象的默认行为,因此您不会从函数原型继承。在Emp函数构造函数中,您返回了匿名对象的实例
return {
name: name,
salary: salary
};
对象
{
name: name,
salary: salary
};
没有方法工作Emp
不是一个构造函数,只是一个工厂。它不会将Emp.prototype
分配给它实例化的对象。