2

我有以下Javascript:

function TestModel()
{
        this.name = "Testvalue";
        this.id = 0;
}

var test = new TestModel();
alert(test.name);

如果我想在不使用构造函数的情况下用不同的参数初始化对象,我需要调用以下代码:

var test = new TestModel();
test.name = "other value";
test.id = 5;
alert(test.name);

我想做的是类似于 C# 风格的东西:

class TestModel
{
    public string name = "Testvalue";
    public int id = 0;
}

TestModel test = new TestModel() { name = "other value", id = 5 };
System.Windows.MessageBox.Show(test.name);

但是,如果我在 javascript 中尝试类似的操作,它将无法正常工作。

简而言之:我试图在不使用构造函数的情况下在 1 行中初始化一个对象。这在javascript中可能吗?

4

3 回答 3

3
function TestModel(name, id)
{
  this.name = name || "TestValue";
  this.id = id || 0;
}

var test = new TestModel("Your Name", 4638);
alert(test.name);
于 2012-07-23T07:46:48.657 回答
2

这看起来最像 C# 语法:

function TestModel(init)
{
   init = init || {}; 
   this.name = init.name || "Testvalue";
   this.id = init.id || 0;
}

var test1 = new TestModel( { name:'testvalue1',id:1 } );
var test2 = new TestModel( { name:'testvalue2',id:2 } );
于 2012-07-23T08:00:38.173 回答
1

这是另一个给你的,就像 KooiInc 给出的一样,但更通用,并且还检查以确保传递的值是正确的类型......

function TestModel(init) {
    var defaults = {
        name: "Bunyip",
        id: 0
    }
    if (typeof init == 'object') {
        for (var prop in defaults) {
            if (defaults.hasOwnProperty(prop)) {
                if (init.hasOwnProperty(prop) && typeof init[prop] == typeof defaults[prop]) {
                    this[prop] = init[prop];
                } else {
                    this[prop] = defaults[prop];
                }
            }
        }
    } else {
        for (var prop in defaults) {
            if (defaults.hasOwnProperty(prop)) this[prop] = defaults[prop];
        }
    }
    delete defaults;
}

var test1 = new TestModel( { name:'testvalue1',id:1 } );
var test2 = new TestModel( { name:'testvalue2',id:2 } );
于 2012-07-23T08:49:06.273 回答