Skip to content

前言

前几日被同事问到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这种东西。

参考资料