答案 0 :(得分:2)
document.getElementsByTagName('form')[0].onsubmit = function() {
//check here the value and return false to stop the submit
if(document.getElementById('num').value == "")
return false
}
创建一个不可调用的对象。即使您将函数(构造函数)作为参数传递,由Object.create
创建的对象也不会具有内部Object.create
属性,这使得函数对象可以被调用。它不能通过原型链继承。
因此,简而言之,您需要将[[Call]]
定义为构造函数(或使用Teacher
语法,仍然使它成为构造函数),这是{{1 }}。
答案 1 :(得分:1)
使用构造函数创建新实例时,例如
const teacher = new Teacher();
然后JS在后台进行以下操作:
1)它创建一个继承构造函数prototype
属性的新对象
2)它以this
作为新对象来调用构造函数:
const teacher = Object.create(Teacher.prototype); // 1
Teacher.call(teacher); // 2
现在,如果您希望老师继承Person的所有方法和属性,则必须使Teacher.prototype
继承Person.prototype
,因为实例继承了它。所以这个:
teacher -> Teacher.prototype
teacher2 ->
必须更改为
teacher -> Teacher.prototype -> Person.prototype
teacher2 ->
因此,教师原型必须继承人原型。
Teacher.prototype = Object.create(Person.prototype);
另一行:
Teacher = Object.create(Person);
几乎没有意义,因为它破坏了Teacher构造函数,因为Object.create
返回一个对象而不是一个函数。但是,您可以:
Object.setPrototypeOf(Teacher, /*to*/ Person);
然后Teacher
会继承Person
的所有 static 属性,但是实例不会继承任何东西,因为Teacher.prototype
不继承{{1} }。
答案 2 :(得分:0)
Teacher = Object.create(Person);
通过上面的代码行,您为教师分配了完全不同的值。
相反,您可能会问以下问题:
Teacher.prototype = Person.prototype
但在这种情况下,问题还在于,对Teacher原型的任何更改也会更改Person原型(因为它们引用了相同的对象),并且可能会产生不良的副作用。
所以
Teacher.prototype = Object.create(Person.prototype);
是正确的
答案 3 :(得分:0)
您的问题有两个子问题。
1)分配Teacher.prototype
与Teacher
:
let Teacher = function() { /* does something */ } // <-- the constructor
Teacher.prototype = Object.create(Person.prototype); // <-- the constructor did NOT lost
Teacher = Object.create(Person.prototype); // <-- the constructor lost
在较低版本中,您将丢失Teacher
的构造函数(当然,如果存在)。在上一个中,您将仅覆盖其原型。
2)分配给Person.prototype
与Person
:
Teacher.prototype = Object.create(Person); // Normally `Person` does not have any properties
Teacher.prototype = Object.create(Person.prototype); // But `Person.prototype` does.
换句话说,可以很好地向Person添加属性,而不是向原型添加属性,但是通常将属性添加到Person.prototype
,以便可以被Person
的实例继承。
Person.foo = function() {}
const person = new Person()
person.foo // undefined
// vs
Person.prototype.foo = function() {}
const person = new Person()
person.foo // its a function