javascript类和对象

时间:2012-11-02 19:29:13

标签: javascript

这可以在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++) {
...
 }
}

4 个答案:

答案 0 :(得分:2)

尝试查看 prototypes closures

来自MDN (prototypes)

  

JavaScript中的所有对象都来自Object;所有物体   从Object.prototype Object.prototype继承方法和属性,   虽然它们可能被覆盖(除了带有null的Object   原型,即Object.create(null))。例如,其他构造函数'   原型覆盖构造函数属性并提供自己的   toString方法。对Object原型对象的更改是   传播到所有对象,除非属性和方法受到限制   这些变化在原型链中被进一步覆盖。

许多人同意直接更改Object类型会导致问题,尤其是在其他库中链接时。考虑到这一点,通常最好使用闭包。

来自MDN (closures):

  

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,如:

  • 的Prototype.js
  • Backbone.js的
  • Angular.js

在一个松散的例子中使用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++) {
// ...