Jef*_*rey 11 javascript accessor
在Javascript中,似乎使用属性访问器并不是那么常见(不像其他OO语言,例如Java).
如果我有一个Person名字的对象,定义为
function Person(name) {
this.name = name;
}
Run Code Online (Sandbox Code Playgroud)
一个人的名字不会改变,但我确实希望能够在需要时访问它,所以我可以这样做:
function Person(name) {
var name = name;
this.getName = function() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
即使在动态语言中,我认为使用getter和setter的原理应用与静态类型的OO语言相同(例如封装,添加验证,限制访问等)
这个问题可能会被认为是主观的,但我很好奇为什么这种行为不会更频繁出现(例如,如果一切都是公开的,Java开发人员就会疯狂).
在javascript中有一种"标准"的方法吗?我见过Object.defineProperty,但并非所有浏览器都支持.
Mat*_*ple 15
Javascript具有可拦截的属性访问器:
http://ejohn.org/blog/javascript-getters-and-setters/
恕我直言这是一个比Java更严格的显式获取者更好的强制执行统一访问原则的解决方案,但这也是该语言的简单性和不灵活性的一部分(例如Groovy允许类似的拦截).
我知道我对这个问题的看法.
吸毒者和制定者都是邪恶的.
等待!真!请耐心等待我,让我解释一下.
只是使用一个方法来获取和设置一个值是..好吧..有点无意义.它不保护,不是真的,你输入的是你得到的东西.
另一方面,我非常喜欢将信息放入其中的方法,然后将信息取回.但这里是神奇的部分!这是不一样的信息.不是直接的.
function Person(name) {
this.getFullName = function() {return this.firstName + " " + this.lastName;};
this.setBirthday = function(date) { this.birthday = date; };
this.getAge = function() { /* Return age based on the birthday */ };
this.isOfLegalDrinkingAge function() { /* do your math here too */ };
}
Run Code Online (Sandbox Code Playgroud)
但大多数时候我只是推送静态数据并获取静态数据.将它隐藏在吸气剂和制定者后面有什么意义?
作为次要原因,在处理DOM和大多数主机对象时,您需要设置属性.你不玩getter和setter.不使用它们符合JS编码器所做的其他"风格".