作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 class foo {} 语法创建一个类,并希望在其中有一个私有(private)变量。现在,我有这样的事情:
'use strict';
class foo {
constructor(x1,y1) {
var x = x1;
var y = y1;
}
get x() {
return x;
}
get y() {
return y;
}
}
每当我尝试访问 foo.x 和 foo.y 时,我都会收到 x is not found 错误。但是,当我尝试将变量声明放在构造函数之外时,它停止工作了。我也在使用静态方法,所以我不能不做一些工作就放弃类语法。我怎样才能解决这个问题?如何在对象内部声明一个变量,该变量是全局的并且在外部无法找到?
最佳答案
这些 getter 是在原型(prototype)上声明的,它们无法访问构造函数中的私有(private)(作用域)变量。您需要使用 Object.defineProperty
用于创建特定于实例的 getter:
class Foo {
constructor(x, y) {
Object.defineProperties(this, {
x: {get() { return x; }, configurable: true},
y: {get() { return y; }, configurable: true}
});
}
}
这与 ES5 中没有什么不同。顺便说一句,假设您没有分配给变量,您不妨将它们设为不可写属性。
关于javascript - 如何在javascript中将变量范围限定为类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42986646/
我是一名优秀的程序员,十分优秀!