我正在阅读有关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;
};
答案 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);