Project1
标题: 求问YEP_MessageCore中这几句应该怎么理解 [打印本页]
作者: gaofei677 时间: 2016-1-13 01:37
标题: 求问YEP_MessageCore中这几句应该怎么理解
由于刚从XP,VX,VA转到VM来,不会用JS,打算修改自带插件YEP_MessageCore,顺便学习JS,然后最开始有几句不是很理解,求大家帮忙解释。
第319行到333行
//=============================================================================
// Bitmap
//=============================================================================
Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize; //定义方法Bitmap_initialize
Bitmap.prototype.initialize = function(width, height) { //定义方法initialize,定以后其用法为Bitmap.prototype.initialize(width, height)
Yanfly.Message.Bitmap_initialize.call(this, width, height);
this.fontBold = false;
};
Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
Bitmap.prototype._makeFontNameText = function() {
if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
return Yanfly.Message.Bitmap_makeFontNameText.call(this);
};
//=============================================================================
// Bitmap
//=============================================================================
Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize; //定义方法Bitmap_initialize
Bitmap.prototype.initialize = function(width, height) { //定义方法initialize,定以后其用法为Bitmap.prototype.initialize(width, height)
Yanfly.Message.Bitmap_initialize.call(this, width, height);
this.fontBold = false;
};
Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
Bitmap.prototype._makeFontNameText = function() {
if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
return Yanfly.Message.Bitmap_makeFontNameText.call(this);
};
我自己写的备注有错吗?其他几句应该怎么理解,其中的this指的是谁?
作者: trentswd 时间: 2016-1-13 05:16
有错
第一行理解为rgss的alias
第二行可以理解为rgss的覆盖定义
this勉强可以理解为rgss的self
作者: 判约之轮 时间: 2016-1-13 20:02
//=============================================================================
// Bitmap
//=============================================================================
Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize; //将Yanfly.Message的Bitmap_initialize函数指针指向Bitmap中的初始化函数
Bitmap.prototype.initialize = function(width, height) { //将Bitmap的初始化函数重定向到新的函数(原先的函数依然在存在)
Yanfly.Message.Bitmap_initialize.call(this, width, height); //调用原本的初始化函数
this.fontBold = false; //将当前Bitmap的字体风格变更为非加粗
};
Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
Bitmap.prototype._makeFontNameText = function() {
if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
return Yanfly.Message.Bitmap_makeFontNameText.call(this);
};
//=============================================================================
// Bitmap
//=============================================================================
Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize; //将Yanfly.Message的Bitmap_initialize函数指针指向Bitmap中的初始化函数
Bitmap.prototype.initialize = function(width, height) { //将Bitmap的初始化函数重定向到新的函数(原先的函数依然在存在)
Yanfly.Message.Bitmap_initialize.call(this, width, height); //调用原本的初始化函数
this.fontBold = false; //将当前Bitmap的字体风格变更为非加粗
};
Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText;
Bitmap.prototype._makeFontNameText = function() {
if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace;
return Yanfly.Message.Bitmap_makeFontNameText.call(this);
};
实际上这是一个非常……怎么说呢?个人觉得很个性的写法,就类似于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 |