Project1

标题: 为什么重写Game_Action.prototype.itemEffectGrow函数不行 [打印本页]

作者: 风之竹    时间: 2018-5-6 13:30
标题: 为什么重写Game_Action.prototype.itemEffectGrow函数不行

重写函数

JAVASCRIPT 代码复制
  1. var Game_Action_itemEffectGrow =Game_Action.prototype.itemEffectGrow;
  2.  
  3. Game_Action.prototype.itemEffectGrow = function() {  
  4.     Game_Action_itemEffectGrow.call(this);  
  5.  
  6.  
  7. };



原函数
JAVASCRIPT 代码复制
  1. //项目效果生长
  2. Game_Action.prototype.itemEffectGrow = function (target, effect) {
  3.     //目标 增加参数( 效果 数据id , 数学 向下取整( 效果 值1)   )
  4.     target.addParam(effect.dataId, Math.floor(effect.value1));
  5.     //制作成功 (目标)
  6.     this.makeSuccess(target);
  7. };




按理来说应该重写后还是调用原来的代码的  为什么会报错呢
作者: 翻滚牛宝宝    时间: 2018-5-6 15:02
参数漏了啊 少年
作者: shitake    时间: 2018-5-6 15:06
除了上边说的 js中必须明确用 return 指出返回值
作者: ekmomo    时间: 2018-5-6 15:31
Game_Action_itemEffectGrow.call(this);  
改成
Game_Action_itemEffectGrow.apply(this, arguments);
作者: ekmomo    时间: 2018-5-6 15:38
我不得不说,你得注释颇具喜感。
作者: 风之竹    时间: 2018-5-6 17:47
ekmomo 发表于 2018-5-6 15:38
我不得不说,你得注释颇具喜感。

这个不是我注释的  是我下载别的大佬 机译的 原文件
作者: 风之竹    时间: 2018-5-6 17:50
本帖最后由 风之竹 于 2018-5-6 17:57 编辑
ekmomo 发表于 2018-5-6 15:31
Game_Action_itemEffectGrow.call(this);  
改成
Game_Action_itemEffectGrow.apply(this, arguments);


大佬apply 和all  什么区别啊
作者: 风之竹    时间: 2018-5-6 17:55
本帖最后由 风之竹 于 2018-5-6 17:58 编辑
ekmomo 发表于 2018-5-6 15:38
我不得不说,你得注释颇具喜感。





大佬像这种原函数带需要参数的  是不是 重写再调用的时候都要加上,apply(this,arguments)而不是,all(this)吗
作者: ekmomo    时间: 2018-5-6 18:08
本帖最后由 ekmomo 于 2018-5-6 18:10 编辑

是call不是all。
这俩都是改变this指向用得,你可以理解为把代码复制到这里来。
作用一摸一样,就是写法不一样。call第二个形参及以后是原函数的参数,而apply只接受两个参数,第一个是this指向,第二个是以数组的形式传递原函数参数。而arguments是绝大部分函数本身都有的一个伪数组(Function自带的,它里面就是各个实参),所以写apply(this,arguments)更方便,也不容易出错。

综上,是的,带参数的都推荐这么写。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1