逆向思维 对 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 是一个 function
var 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梦的口袋啊,我缺什么你来什么,幸福来的太突然有没有~~)
三、题外话
上文中涉及到了一些关键字
- constructor
- __proto__
- prototype
这里就不对他们做过多介绍了,网上有很多理论性的东西供给大家看,复制过来也没什么意义,
而且一个文件不能过长,这是我的编程习惯~23333,绝对没有偷懒。
关于prototype在开发中的妙用,我在下面文章中介绍给大家~
为什么不继续写呢?因为写到这里已经很长了~
See Again~
之前
真爱无价,欢迎打赏~