有两个对象,他们的名字叫obj1, 和obj2。
他们很像,但是其实是生活在不同的平行空间中,彼此不能相见。
下面请看看他们长什么样子。
var obj1 = {
power: 8,
inc: function (elem1, elem2) {
this.power++;
var food = this.power + elem1 + elem2;
console.log(food);
}
};
var obj2 = {
power: 3,
dec: function (elem1, elem2) {
this.power--;
var food = this.power + elem1 + elem2;
console.log(food);
}
};
obj1 有自身的法力因子power, 可以在周边接收两种元素,分别是elem1和elem2。
当念出法力名inc (increase的缩写)的时候,就会增加食物来支撑他走下去。
所以他就一直念:
obj1.inc(1,2); // 12
obj1.inc(1,2); // 13
食物一次增长一点,每施法获取食物的时候,法力因子就会增加一次。
这些法力因子和食物越来越多,越来越重。obj1非常着急,现在已经多得背不动了。
如果再不卸掉点power和食物,就会在旅行途中被压死。
情况异常紧急!
console.log(obj1.power); // 10
我们再来看看obj2的处境。
obj2也有个自身的法力因子power, 也可以在周边接收两种元素,分别也是elem1和elem2。
他的法力刚好和obj1相反,当念出法力名dec( decrease的缩写)的时候,就会一点一点消耗现有的power以获取食物。
每次饿了的时候他就施一次法。可是power越少,食物就越少。
而且只减不增。
obj2.dec(1,2); // 5
obj2.dec(1,2); // 4
这时他掏出自己的power 一看。卧槽! 他已经快没有法力了。
怎么办?obj2随时都有被饿死的危险!
console.log(obj2.power) // 1
我们在将场景切回到obj1这里。
obj1趴在地上走不动了,心里面想:如果我现在有个电话能call给上帝,让他帮我卸掉点power那我就能活过来了。
就在这时,奇妙的事情发生了。
他发现身边多了一个电话。
这时候电话那一头突然传来了声音:请按 O- B - J - 2 - . - D- E -C。
obj2毫不犹豫的按下了所指示的按键, 并且下意识的紧紧抓住 elem1 = 1, 和 elem2 = 2。
当时情景描述如下:
obj2.dec.call(obj1, 1, 2); // 12
突然狂风大作,砂石横飞。
一阵眩晕过后, obj1 睁开眼,突然发现人轻松了不少。
食物变少了。这时他又取出了自己的power查看:
console.log(obj1.power); // 9
OMG!power居然可以减少了,简直是奇迹啊。
obj1 狂喜,接连又打了几次电话。
obj2.dec.call(obj1, 1, 2); // 11
obj2.dec.call(obj1, 1, 2); // 10
又掏出power查看:
console.log(obj1.power); // 7
哇塞,已经度过危险期了,整个人都感觉都飞起来了,哈哈!
好了,obj1的危险警报已经解除,咱们再来关心加obj2吧。
obj2现在已经饿得瘫在了地上。
心里也想: 如果我现在有个电话能call给上帝,让他帮我增加点power那我就能活过来了。
然并卵,电话没有出现。
等了半天, 突然发现地上有张申请表。
申请表提示写下下面这行信息 obj1.inc。
obj2照着写了,并且下意识的紧紧抓住 elem1 = 1, 和 elem2 = 2。
还是然并卵。
obj2就快崩溃了。
就在这时,突然看见申请表最右下方有一行小字:
请将手上的所有elements组合成一个整体。
obj2细细观察elem1和elem2,发现它们居然像卯榫一样可以耦合。
于是花了点时间它们拼了起来。
obj2心里想:如果还不发生奇迹,我就疯了。
果然,奇迹晚了点,但还是来了。
当时情景描述如下:
obj1.inc.apply(obj2,[1,2]); // 5
掏出power 一看, 我擦!居然也比原来增加一点。
console.log(obj2.power); // 2
于是他在申请表上又重复写了两次, power 增加到了 4。食物也增加到了7。
终于又活过来了。
obj1.inc.apply(obj2,[1,2]); // 6
obj1.inc.apply(obj2,[1,2]); // 7
console.log(obj2.power); // 4
可是对于obj1和obj2高兴是暂时的。
电话和申请表都被锁在当场,带不走。
只有拿起电话和填上申请表才能发挥作用。
obj1 和 obj2都有要事在身,需要马上上路。
可是以后的路怎么办呢?
他们都在想,如果能把这种神奇的力量提炼出来绑在自己的身上那该多好啊。
人背起来喝凉水都塞牙,可是人顺起来也是好运挡也挡不住。
obj1, 和 obj2 都发现了 腰带上面印了一行字。
obj1的腰带印的是:obj2.dec; 而obj2上的腰带印的是obj1.inc. 当时情景描述如下:
var belt1 = obj2.dec.bind(obj1);
var belt2 = obj1.inc.bind(obj2);
obj1 按下了腰带上的按钮,并且抓住 elem1和elem2:
belt1(1,2); // 9
console.log(obj1.power); // 6
食物继续减少,power也在减少,之前是7。完美!
obj2按下了了腰带上的按钮,并且把elem1和elem2拼成的整体抓在手上。
belt2([1,2]); // 51,2undefined
console.log(obj2.power); // 5
我靠!腰带输出乱码。 ‘
undefined’是个什么东东啊,从来没看过,欺负俺不认识英文是吧,套路太深。
虽然power是增加了,但是没有食物啊。
obj2又要绝望了。你说他怎么就是比obj1坎坷点呢。
但是好在obj2是个锲而不舍的对象。
他仔细的把皮带脱下来研究了下,终于找到了一点端倪。
原来在皮带大按键下还有 三个小点按键。
好,老子再试!
belt2(...[1,2]); // 9
console.log(obj2.power); // 6
哈哈哈,终于又成功了。 食物有增长,power也有增长!完美中的完美啊!
两位都解围了,obj1 和 obj2又兴冲冲的赶路了。
他们可以通过自身的法力,以及神奇腰带的附加法力平衡食物和power。
后来他们又发现了更为方便的方法。
把elem1 =1 和elem2=2直接绑在腰带上, 就不用每次抓着施法那么麻烦了。
当时场景描述如下:
var belt1 = obj2.dec.bind(obj1, 1, 2);
belt1( );
var belt2 = obj1.inc.bind(obj2, ...[1,2]);
belt2( );
他们还将遇到什么困难和奇葩的事情呢?
请听下回分解!