如何在Javascript对象中实现多个新函数?

时间:2014-02-03 10:11:13

标签: java javascript class constructor prototype

我正在阅读有关Javascript中的类创建的一些内容。我知道这个概念在Javascript中不存在,而且可以使用prototype

我正在尝试将以下代码段从Java翻译为Javascript。具体来说,我想要两个构造函数,一个是无参数的,一个是两个参数:

public class MyClass {

    int width = 10;
    int height = 20;

    public MyClass() { };

    public MyClass(int w, int h) {

        this.width = w;
        this.height = h;

    };

    ...

}

据我了解,我需要在Javascript中定义我的'class':

function MyClass() {

    this.width = 10;
    this.height = 20;

};

但是,我如何定义我的第二个构造函数?我希望能够以两种方式创建我的课程实例:

var Instance1 = new MyClass();
var Instance2 = new MyClass(33,45);

更新

好的,我理解我的构造函数不能具有相同的名称,因为Javascript无法识别不同的参数类型。所以,如果我为我的构造函数使用不同的名称,我应该如何声明它们?以下是否正确?

function MyClass() {

    this.width = 10;
    this.height = 20;

};

MyClass.prototype.New2 = function(w,h) {

    var result = new MyClass();

    result.width = w,
    result.height = h,

    return result;

};

1 个答案:

答案 0 :(得分:2)

Javascript没有多方法,因此你唯一的选择是解析参数并采取相应的行动。一个常见的习惯用法是使用||来检查参数是否为“空”(未定义或0):

function MyClass(w, h) {
    this.width = w || 10;
    this.height = h || 20;
};

如果0在您的上下文中是有效值,请明确检查undefined

function MyClass(w, h) {
    this.width  = typeof w != 'undefined' ? w : 10;
    this.height = typeof h != 'undefined' ? h : 20;
};

另一种选择是将参数作为对象提供,并将其与“defaults”对象合并。这是jquery中的常见模式:

function MyClass(options) { 
  // set up default options 
  var defaults = { 
    width: 10,
    height: 20
  }; 

  var options = $.extend({}, defaults, options);