ES5中如何向父构造函数传递参数及相关疑问
ES5构造函数继承:参数传递与hasOwnProperty疑问解析
咱们一步步来拆解你的问题:
1. 当前的参数传递写法是正确的
在ES5里,向父构造函数传递参数的标准方式就是用Person.call(this, name, age, gender)。这个调用会把Employee实例的this绑定到Person构造函数中,让父构造函数直接在当前的Employee实例上初始化name、age、gender这些属性,这是完全符合ES5继承规范的写法。
2. 为什么john.hasOwnProperty('name')返回true?
你觉得它应该返回false,可能是混淆了实例自身属性和原型继承属性的区别:
- 当你通过
Person.call(this, ...)调用父构造函数时,Person里的this.name = name这类语句,是直接给当前的Employee实例(也就是john)添加了属于它自己的属性,这些属性是挂载在实例本身上的,不是从原型链继承来的。 - 而
toString这类方法,是存在于Object.prototype上的,john通过原型链(Employee.prototype->Person.prototype->Object.prototype)继承了这个方法,但它并不是john实例自身的属性,所以john.hasOwnProperty('toString')返回false。
简单来说:你当前的写法就是让父构造函数给子实例添加自身属性,这是构造函数继承的常规用法——毕竟每个员工的姓名、年龄这些都是独有的,应该作为实例自身属性存在,而不是共享在原型上。
内容的提问来源于stack exchange,提问作者Flying Gambit
相关产品推荐
相关产品推荐

