美文网首页Cocos Creator
JS如何做到面向对象

JS如何做到面向对象

作者: Thomas游戏圈 | 来源:发表于2019-08-06 14:53 被阅读4次

    JS本省没有面向对象,它是如何来做类,和类的实例的呢?。

    1: 函数对象的prototype

       每个函数对象都有一个prototype成员,指向一个表, 

    function a() {};   a.prototype 指向一个表对象

    2: 表的__proto__

      每个js表(Object)对象,都会有一个成员__proto__,指向一个表(Object)对象。当我们访问这个Object的key的时候,先在它自己的表里找,如果没有找到,接着在它的__proto__表里找,如果__proto__表里没有,到__proto__表里的__proto__表里找,….只到全部搜索完成;

    3: new+ 函数机制

      var a = new A(); 这个是一个典型的new + 函数的模式,

    在JS里面我们将A函数称为构造函数, 那么new A()到底做了哪些事情呢?

    (1)参生了一个新的表对象{}, 下称instance;

    (2)将instance,作为this, 传递给A函数;

    (3) 将A函数的prototype表种的key, value复制到instance表里面的__proto__下面;

    (4) 返回新的对象表实例instace;

    4: js 如何面向对象

    (1)定义构造函数:

    Function Person() { … …}

    (2) 往构造函数的prototype表里面加成员函数

       Persion.prototype.set_age = function(age) {}

    (3) new + 构造函数后得到的新对象;

      Var a = new Person(); a 是一个表 {… , __proto__: {set_age: 函数对象(来源于prototype)}},

    (4) a.set_age(10); 在a实例表里面找, 没有找到set_age,

    就到__proto__里面找,找到了,所以a.set_age() 就调用到了上面的set_age函数,根据隐式传递this, 进入set_age后this是a实例;

    所以,a是Person的实例,通过实例,可以调用到类的方法,这个是js面向对象的本质,你搞懂了么?还是晕了,

    如果晕了,再看几次。

    学习交流群:872282999

    相关文章

      网友评论

        本文标题:JS如何做到面向对象

        本文链接:https://www.haomeiwen.com/subject/lczidctx.html