设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3817|回复: 3
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
136
在线时间
1050 小时
注册时间
2006-5-3
帖子
774
跳转到指定楼层
1
发表于 2016-1-13 01:37:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
由于刚从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指的是谁?
漏夏同人
《咱的夏天》
下载地址:http://tieba.baidu.com/p/2681607456
人员招募:http://rpg.blue/thread-339747-1-1.html

Lv1.梦旅人

梦石
0
星屑
70
在线时间
386 小时
注册时间
2007-7-27
帖子
4106

开拓者

2
发表于 2016-1-13 05:16:16 手机端发表。 | 只看该作者
有错
第一行理解为rgss的alias
第二行可以理解为rgss的覆盖定义
this勉强可以理解为rgss的self

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
108
在线时间
1006 小时
注册时间
2008-11-9
帖子
1658
3
发表于 2016-1-13 20:02:29 | 只看该作者
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

点评

不对- -,觉得这么说还是不太直观- -,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
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
386 小时
注册时间
2007-7-27
帖子
4106

开拓者

4
发表于 2016-1-13 21:24:22 | 只看该作者
这个可能在js正规里面是比较个性的写法
但是目前的插件都是这么来保留原来的函数的

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

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-23 07:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表