Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
你能写Javascript对象初始化速记C#风格吗?_C#_Javascript - Fatal编程技术网

你能写Javascript对象初始化速记C#风格吗?

你能写Javascript对象初始化速记C#风格吗?,c#,javascript,C#,Javascript,我有以下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;

我有以下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#风格的事情:

但是,如果我在javascript中尝试类似的东西,它将不起作用

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

这看起来最像C#语法:

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

var test = new TestModel("Your Name", 4638);
alert(test.name);

这是另一个给你的,就像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 } );

(+1)您也可以说
this.name=name | | |“TestValue;”
来保存行“不使用构造函数”是什么意思?您已经在使用构造函数。这看起来与我想要的最接近。我需要写一些东西(同时将我的C#转换为javascript)。谢谢。
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 } );
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 } );