我通过浏览多个网站教程而感到困惑,现在无法找到以下两个语句之间的区别; (假设Person是Employee的超级类/函数)
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;
我知道第一行显示一个Employee REFERENCE指向Person构造函数。 Person的构造函数由 Object.create()创建。 第二个是简单地创建一个Employee构造函数。
让我知道我是不是一个java程序员,发现javascript令人困惑。
答案 0 :(得分:2)
javascript中的原型就像java中的类一样。所以代码:
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;
意思是:
class Employee inherits new Person() { // meaning of first line
Employee constructor = Employee // meaning of second line
}
在经典的javascript中,没有类,而是有构造函数。构造函数只是一个常规函数,可以通过new myFunction()
而不是myFunction()
来调用。
而不是属于类的构造函数,在javascript中,原型(类类对象)是构造函数的属性。是的,函数就像javascript中的任何其他东西一样,因此它们可以像任何其他对象一样拥有属性。
另外,在javascript构造函数中不能继承构造函数(不要傻:D)。相反,构造函数继承自对象(严格来说,对象继承自对象,因为在调用构造函数时会发生继承)。这就是为什么我们创建一个超类对象的实例 - 使它成为一个对象,以便我们可以继承。
从技术上讲,行Employee.prototype.constructor
不是必需的。第一行是设置继承所需的全部内容。