JS如何做到面向对象

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面向对象的本质,你搞懂了么?还是晕了,

如果晕了,再看几次。

这边有个游戏开发的免费直播课 大家可以一起来交流学习

cocos creator小游戏开发直播课

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值