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

Project1

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

[已经解决] 脚本问题,index()和_index的区别

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2017-10-6 23:09:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
Window_Selectable.prototype.index = function() {
    return this._index;
};
MV脚本里面有很多,这样的函数
这个的意义是什么
直接 _index 不就可以使用的吗
为什么非要经过index()

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

2
发表于 2017-10-7 02:38:36 | 只看该作者
本帖最后由 刺夜之枪 于 2017-10-6 14:12 编辑
index()和_index的区别

_index是Window_Selectable(class)的一个成员变量(member variables)。index()则 是该类的一个getter函数

直接 _index 不就可以使用的吗

至少从执行的角度来讲,_index的确可以直接读取/修改。
为什么非要经过index()

这仅仅是一个由开发者(写这个代码的人)定下的规范问题。在许多JavaScript的规范里,私有成员变数(private member variables)的表示方式是在变量名前面加一个‘_’用来直观地表示“这个变量是本类的私有成员变数”。 这样规定了程序的其他地方无法直接获取/修改这个变量。为了读取这个变量则需要创建一个getter函数在你的例子里就是index(),通过调用 xxx.index() 读取私有变量 '_index'。

其作用之一就是对外保持统一的接口 index():假设程序的100个其他地方调用了.index(),当代码需要修改的时候,只要修改getter的内容即可。

拓展阅读:
1. 谷歌JavaScript规范
2. 封装 (Encapsulation)




点评

是的,只要修改getter的内容即可。可是这里是一对一的,不存在其他东西。所以我才说为什么一定要经过index()  发表于 2017-10-7 09:09

评分

参与人数 2星屑 +50 +2 收起 理由
余烬之中 + 50 + 1 我很赞同
玛尔斯 + 1 认可答案

查看全部评分


回复 支持 2 反对 0

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32066
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

3
发表于 2017-10-7 07:41:16 | 只看该作者
def initialize
  @index = 0
end

def index
  return @index
end

点评

MV没有attr_accessor就可以在其他地方读取了。  发表于 2017-10-7 09:11
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
179
在线时间
197 小时
注册时间
2015-12-26
帖子
35
4
发表于 2017-10-8 21:47:29 | 只看该作者
其实无所谓呀,在调用的时候并没有什么区别。

是因为this._index,是一个可写的变量,说不定某个位置调用把值改变了

而用函数封装起来后,说明这里只是单纯的调用,不能对值进行修改。

点评

哦。那也就只是使用习惯的问题吧。自己要是没写错在某个位置把这里值给变了,就没问题了。还是你说的清楚。  发表于 2017-10-10 09:41

评分

参与人数 1星屑 +50 +1 收起 理由
余烬之中 + 50 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-14 15:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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