zoukankan      html  css  js  c++  java
  • JavaScript中new了一个对象,发生了什么?

    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    
    }
  • 相关阅读:
    [洛谷][P1503][鬼子进村][Treap]
    [noi 2004] 郁闷的出纳员
    bzoj 3224,tyvj 1728普通平衡树
    Treap
    [模拟赛]棘手的操作
    bzoj 4551[Tjoi2016&Heoi2016]树
    bzoj2527 [Poi2011]Meteors
    bzoj4152 [AMPPZ2014]The Captain
    bzoj4516 [Sdoi2016]生成魔咒
    bzoj4547 小奇的集合
  • 原文地址:https://www.cnblogs.com/jaykoo/p/10515799.html
Copyright © 2011-2022 走看看