【步兵 cocos-js】逆向思维 对 js对象和函数进行分析

来源:互联网 发布:到哪里投诉阿里云 编辑:程序博客网 时间:2024/06/05 14:23

逆向思维 对 js对象和函数进行分析 by EOS.

一、关于 this

首先理解一下this,我的个人理解,

man.work = function(){this;}man.work()

work是个函数,那么这个函数体内的this,就是调用他的对象,
a.work this就是a,b.work this就是b,谁点this就是谁。
(这里的“是”,只的是指向指向的同一地址)


二、obeject 和 function

有了这个基础,那么下面我们来分析啊,函数 和 对象。

var Person = function(){}; //Person 是一个 functionvar man = new Person(); // man 是一个 obejct//上面可以理解为这样。var man = {}//或 new Obeject();man.xxx = Person;man.xxx();

所以Person里面的this就会指向man,因为是man点的。

现在我给Person添加一个方法,因为Person他是也一个对象。
(这里请务必我吐槽下,func可以嵌套func,那就意味着函数可以我们可以这样:
Person.say.h.e.l.l.o.b.a.b.y.l.e.t.s.go() 你没有看错,我只是在调用一个函数。233333)

咳咳,不要被我拐跑了,赶紧回神!回神!

Person.say = function () {    log(this.name);}

那么我们如果用man.say()这样去调用,他是找不到say这个方法的。

根据之前上面说的,我们可以知道这个this是指向Person的。
但是上面有这么一句:

man.xxx = Person;

那么是不是我知道这个xxx,我就可以去掉用say呢?
答案是肯定的。而这个xxx就是constructor。

所以用man.constructor.say() 就可以输出Person.name。

到这里你有没有对 对象和函数 理解更加深刻了一些呢~
(ps:没有?我tm写了这么多,你竟然说没有?!)


三、prototype

咳咳,趁热打铁不妨让我们在升华一下?

其实呢, var man = new Person();
还不止做了这么多。他还做了另外一件事那就是

man.\__proto__ = Person.prototype;

好了,你说我写了个say,就是想给man用的啊,他调不到怎么办,
那么有这里3个方法:

(函数主体用xxxx来代替)
1. 蠢蠢的方法:man.say = xxxx ; (ps:你TM在逗我?)
2. 明智的方法:写到Person里面,Person = function(){this.say = xxxx;}
3. 叼叼的方法:(要来了要来了,我会告诉你前面都是为了这里做铺垫?)
Person.prototype.say= xxxx;

在第3个方法的情况下,我们调用man.say(),他会怎么做呢,当然是去Person里面翻厨捣柜,
翻了半天发现没有,怎么办呢,他就会去自己的__proto__里找,那么他的__proto__是什么呢?
当然就是Person.prototype啊,我们say就是赋给他的啊!!!!
(ps:这个功能简直就好比,哆啦A梦的口袋啊,我缺什么你来什么,幸福来的太突然有没有~~)


三、题外话

上文中涉及到了一些关键字

  1. constructor
  2. __proto__
  3. prototype

这里就不对他们做过多介绍了,网上有很多理论性的东西供给大家看,复制过来也没什么意义,
而且一个文件不能过长,这是我的编程习惯~23333,绝对没有偷懒。

关于prototype在开发中的妙用,我在下面文章中介绍给大家~
为什么不继续写呢?因为写到这里已经很长了~这里写图片描述

See Again~
之前
真爱无价,欢迎打赏~
这里写图片描述

0 0
原创粉丝点击