查看: 4113|回复: 3

[已经解决] 求问YEP_MessageCore中这几句应该怎么理解

[复制链接]
梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
回帖
602
发表于 2016-1-13 01:37:54 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
由于刚从XP,VX,VA转到VM来,不会用JS,打算修改自带插件YEP_MessageCore,顺便学习JS,然后最开始有几句不是很理解,求大家帮忙解释。

第319行到333行
[pre lang="javascript"]//=============================================================================
// 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);
};[/pre]

我自己写的备注有错吗?其他几句应该怎么理解,其中的this指的是谁?
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html
梦石
0
星屑
80
在线时间
386 小时
注册时间
2007-7-27
回帖
4075

开拓者

发表于 2016-1-13 05:16:16 来自手机 | 显示全部楼层
有错
第一行理解为rgss的alias
第二行可以理解为rgss的覆盖定义
this勉强可以理解为rgss的self

点评

第二行,什么叫涵盖定义?  发表于 2016-1-13 09:19

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
回帖
1633
发表于 2016-1-13 20:02:29 | 显示全部楼层
[pre lang="javascript"]//=============================================================================
// 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);
};
[/pre]
实际上这是一个非常……怎么说呢?个人觉得很个性的写法,就类似于RGSS时代把原有的函数变成另外的名字,然后自己复写同名函数,并调用原函数的方式
如果你学过C语言,那么Yanfly.Message就很类似于存储着若干个函数指针的数组,JS中只存在指针,不存在深拷贝这种东西
JS中的this代表函数上下文,指向调用当前的函数的主体,比如第二行中,调用该函数的类是Bitmap,那么在这个函数中的this.fontBold就是访问该函数的Bitmap实例的fontBold

点评

不对- -,觉得这么说还是不太直观- -,JS中=是传引用,而不是复制,如此而已  发表于 2016-1-13 21:23
Yanfly.Message.Bitmap_initialize这个函数,效果等效于实例本来就有这个函数的效果  发表于 2016-1-13 21:17
这里的this要结合call这个函数说,调用call的作用等效于在第一个参数的上下文中,运行以后面几个参数运行的前面的函数,也就是在Bitmap实例中运行的  发表于 2016-1-13 21:16
=指的是指针拷贝,比如在内存地址FFFE~FFFF处建立了一个函数,=传递的就是FFFE这个入口,而不是整个函数  发表于 2016-1-13 21:14
Yanfly.Message.Bitmap_initialize.call(this, width, height) 这里的this应该怎么理解?  发表于 2016-1-13 20:58
回复

使用道具 举报

梦石
0
星屑
80
在线时间
386 小时
注册时间
2007-7-27
回帖
4075

开拓者

发表于 2016-1-13 21:24:22 | 显示全部楼层
这个可能在js正规里面是比较个性的写法
但是目前的插件都是这么来保留原来的函数的

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部