这可以在Javascript中完成吗?我正在将java wiki页面转换为javascript。我很确定var应该用来代替int吗?
class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
...
for (int i = 0; i < maxLoops; i++) {
...
}
}
答案 0 :(得分:2)
尝试查看 prototypes 或 closures 。
JavaScript中的所有对象都来自Object;所有物体 从Object.prototype Object.prototype继承方法和属性, 虽然它们可能被覆盖(除了带有null的Object 原型,即Object.create(null))。例如,其他构造函数' 原型覆盖构造函数属性并提供自己的 toString方法。对Object原型对象的更改是 传播到所有对象,除非属性和方法受到限制 这些变化在原型链中被进一步覆盖。
许多人同意直接更改Object
类型会导致问题,尤其是在其他库中链接时。考虑到这一点,通常最好使用闭包。
Java等语言提供了将方法声明为私有的功能, 意思是它们只能通过其他方法调用 类。
JavaScript不提供本地方式,但确实如此 可以使用闭包来模拟私有方法。私有方法 这不仅对限制对代码的访问有用:它们还提供了一个 管理全局命名空间的强大方法,保持不必要 将公共界面混乱到代码的方法。
答案 1 :(得分:1)
function Sample(i, j) {
this.ivar1 = i;
this.ivar2 = j;
this.emptyMethod = function() {};
}
var sample = new Sample(1, 2);
sample.ivar1; // 1
答案 2 :(得分:1)
有不同的方法来松散地模仿这种行为。有几个库可以帮助您构建更多面向对象的JavaScript,如:
在一个松散的例子中使用Prototypes
(不是原型框架):
function Sample() {};
var i = new Sample();
var x = new Sample();
Sample.prototype.init = function() {
this.ivarA = "constant 1";
this.ivarB = "constant 2";
}
Sample.prototype.set = function(i, j) {
this.ivar1 = i;
this.ivar1 = j;
}
//example of override
m.set = function(i, j) {
this.ivar1 = i + j;
this.ivar2 = i + i + j;
}
i.init();
i.set("hey", "whats up?");
x.set(10, 5);
答案 3 :(得分:1)
// class Sample ...
// (including constructor)
function Sample (i, j) {
this.ivar1 = i;
this.ivar2 = j;
}
// ... extends Object
Sample.prototype = Object.create(Object.prototype);
// (the first Object is part of call, the second Object is the one from 'extend')
Sample.prototype.emptyMethod = function () {};
...
// Don't know where to put, probably error in original question:
// for (var i = 0; i < maxLoops; i++) {
// ...