JavaScript 一直强调没有类的概念, 但是 JavaScript 中我们也经常需要 new 一个对象.
new 是一个运算符, 用来调用函数(JS 中函数可以作为普通函数被调用做方法, 也可以通过 new 来调用作为一个构造器)
- function Person(name){
- this.name = name
- }
- let p = new Person('Jay')
其实, 在 JavaScript 中任何对象通过构造器 (例如 Person) 的创建. 实际上是克隆了一个 Object.prototype 空对象(JS 根对象).
克隆一个 Object.prototype 对象后, 初始化将新对象的原型指向 Object.prototype.
事实上, 除了根对象 Object.prototype. 任何一个对象都有一个原型.
像下面这样常见的创建对象方式, 在 JavaScript 引擎内部, 都是进行同样的操作 -- 克隆
- let obj1 = {
- }
- let obj2 = new Object()
那么在原型链中的操作:
- let sport = {
- category: 'ball'
- }
- function Tennis(){}
- Tennis.prototype = sport
- let t = new Tennis()
主要步骤有两点:
克隆一个 JS 的 Object.prototype 对象 t
将 t 的原型指向它的构造器 (Tennis) 原型, sport -- "t.__proto__ = Tennis.prototype"
最后补充一点, 构造器函数中有两句语句被隐式执行了, 上面的 Tennis 中
- function Tennis(){
- let this = {
- __proto__: Tennis.prototype
- }
- // .....
- // let this.xxx = xxx
- // .....
- return this
- }
来源: http://www.bubuko.com/infodetail-2984881.html