Appearance
前言
前几日被同事问到js继承方面的东西,想来想去就知道是通过prototype来实现,具体实现也搞不清了。赶紧回去翻红宝书复习下。对原型这块的理解又更深了一步。
new 的理解:伪代码
从下方可以看到 js继承是原型继承, 不是类继承。
javascript
new Person("John") = {
var obj = {};
obj.__proto__ = Person.prototype; // 此时便建立了obj对象的原型链:
// obj->Person.prototype->Object.prototype->null
var result = Person.call(obj,"John"); // 相当于obj.Person("John")
return typeof result === 'object' ? result : obj; // 如果无返回值或者返回一个非对象值,则将obj返回作为新对象
}function 的constructor是什么
默认情况下是指的是定义本身。 是对象上一个指向构造函数的引用。用来辅助 instanceof 等关键字的实现。下方例子看一看到,没什么用。 F.prototype.constructor === f.__proto__.constructor === F
js
function People(name) {
this.name = name
}
People.prototype.constructor === People // true
console.log(new People('yangmanman')) // yangmanman
// 重新指向
People.prototype.constructor = function(name) {
this.name = "123"
}
console.log(new People('yangmanman').name) // yangmanman 修改没用
// ---------------------- 分割线 -----------------------------如何理解原型继承
使用的是指向和call这种东西。
参考资料
