Project1

标题: 求问YEP_MessageCore中这几句应该怎么理解 [打印本页]

作者: gaofei677    时间: 2016-1-13 01:37
标题: 求问YEP_MessageCore中这几句应该怎么理解
由于刚从XP,VX,VA转到VM来,不会用JS,打算修改自带插件YEP_MessageCore,顺便学习JS,然后最开始有几句不是很理解,求大家帮忙解释。

第319行到333行
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // Bitmap
  3. //=============================================================================
  4.  
  5. Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize;       //定义方法Bitmap_initialize
  6. Bitmap.prototype.initialize = function(width, height) {               //定义方法initialize,定以后其用法为Bitmap.prototype.initialize(width, height)
  7.                 Yanfly.Message.Bitmap_initialize.call(this, width, height);
  8.                 this.fontBold = false;
  9. };
  10.  
  11. Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
  12. Bitmap.prototype._makeFontNameText = function() {
  13.     if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
  14.                 return Yanfly.Message.Bitmap_makeFontNameText.call(this);
  15. };


我自己写的备注有错吗?其他几句应该怎么理解,其中的this指的是谁?

作者: trentswd    时间: 2016-1-13 05:16
有错
第一行理解为rgss的alias
第二行可以理解为rgss的覆盖定义
this勉强可以理解为rgss的self
作者: 判约之轮    时间: 2016-1-13 20:02
JAVASCRIPT 代码复制
  1. //=============================================================================
  2. // Bitmap
  3. //=============================================================================
  4.  
  5. Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize;                               //将Yanfly.Message的Bitmap_initialize函数指针指向Bitmap中的初始化函数
  6. Bitmap.prototype.initialize = function(width, height) {                                           //将Bitmap的初始化函数重定向到新的函数(原先的函数依然在存在)
  7.                 Yanfly.Message.Bitmap_initialize.call(this, width, height);                                       //调用原本的初始化函数
  8.                 this.fontBold = false;                                                                                                    //将当前Bitmap的字体风格变更为非加粗
  9. };
  10.  
  11. Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
  12. Bitmap.prototype._makeFontNameText = function() {
  13.     if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
  14.                 return Yanfly.Message.Bitmap_makeFontNameText.call(this);
  15. };

实际上这是一个非常……怎么说呢?个人觉得很个性的写法,就类似于RGSS时代把原有的函数变成另外的名字,然后自己复写同名函数,并调用原函数的方式
如果你学过C语言,那么Yanfly.Message就很类似于存储着若干个函数指针的数组,JS中只存在指针,不存在深拷贝这种东西
JS中的this代表函数上下文,指向调用当前的函数的主体,比如第二行中,调用该函数的类是Bitmap,那么在这个函数中的this.fontBold就是访问该函数的Bitmap实例的fontBold
作者: trentswd    时间: 2016-1-13 21:24
这个可能在js正规里面是比较个性的写法
但是目前的插件都是这么来保留原来的函数的

不过讲真我觉得楼主应该先看看js入门




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