我正在尝试使用 OO JavaScript 实现以下目标:
class Sample
{
public int x {get; set;}
public int y {get; set;}
public int z
{
get {return x+y;}
}
}
我无法理解如何在上面的类中实现属性“z”。
我正在尝试使用 OO JavaScript 实现以下目标:
class Sample
{
public int x {get; set;}
public int y {get; set;}
public int z
{
get {return x+y;}
}
}
我无法理解如何在上面的类中实现属性“z”。
你必须使用一个函数。从 ECMAScript 第 5 版 (ES5) 开始,该函数可以成为您以正常非函数方式访问的属性的“getter”;在此之前,您必须使用显式函数调用。
这是 ES5 的方式,使用defineProperty
:Live copy | 资源
function Sample()
{
// Optionally set this.x and this.y here
// Define the z property
Object.defineProperty(this, "z", {
get: function() {
return this.x + this.y;
}
});
}
用法:
var s = new Sample();
s.x = 3;
s.y = 4;
console.log(s.z); // "7"
使用 ES3(例如,早期版本):
function Sample()
{
// Optionally set this.x and this.y here
}
Sample.prototype.getZ = function() {
return this.x + this.y;
};
用法:
var s = new Sample();
s.x = 3;
s.y = 4;
console.log(s.getZ()); // "7"
请注意,您必须实际进行函数调用getZ()
,而 ES5 使其成为可能的属性访问(只是z
)。
请注意,JavaScript(还)没有一个class
特性(尽管它是一个保留字并且即将推出)。您可以通过构造函数和原型来创建对象类,因为 JavaScript 是一种原型语言。(嗯,它有点混合。)如果你开始进入层次结构,就会开始有一些重要的、重复的管道。有关更多信息,请参阅Stack Overflow 上的其他答案。