zoukankan      html  css  js  c++  java
  • JS中new的运行方式

    在JS中,有两个基础原型,分别是Function.prototype和Object.prototype。这两个原型组成了JS中的所有实例他们的关系是 Function.prototype ----> Object.prototype ----> null。

    常用的创建类的有两种方法,我们从这两种方法讲两种prototype的关系。

    第一种是先有一个原型,直接令新的对象的__proto__指向已经有的原型。这种时候可以类比继承关系,但区别是把那个原型的状态(如属性的取值等)也一并继承过来了。

    但是记住这个时候新的对象从原型继承的值如果没有被初始化/赋值,原型中的值改变的话,新的对象中的对应值也会改变。

    第二种是使用new来继承,new在JS里这样运行:

    1.创建一个最基础的Object对象(内容为空 )并且初始化。

    2.把后面的构造函数放进刚创建的obj中,并且设置__proto__为函数的对象。

    3.使用创建出的对象作为obj,在obj中执行那个函数,,当然那个函数要对刚创建的这个对象进行初始化,然后返回。

    4.如果返回的是Object对象,new就返回这个对象,否则返回刚创建的obj。

    这里解释一下函数的原型类型:

    比如说有 

    function A(){ var a = 1;};

    那么A是一个Object,他的constructor就是A(),平时调用A()就相当于调用A这个Object的构造函数。

     

    PS:prototype属性是该对象作为proto的时候的类型。__proto__是指向本对象的原型对象的指针。

     

     

  • 相关阅读:
    docker 上的第一个网址
    redis 和mongodb的区别
    在docker 里 搭建redis 主从节点
    .Net AOP 的简单入门 (静态代理 适配器模式完成aop)
    CocoaPods pod install下载慢问题
    [OC]OC基础概念
    [Swift]swift之随机数
    [Swift]iOS开发之气泡对话框的实现
    [Swift]CoreData防止数据冲突
    [Swift]iOS开发之初识CoreData
  • 原文地址:https://www.cnblogs.com/dabney/p/6657533.html
Copyright © 2011-2022 走看看