是否可以在JavaScript中进行类似于C#的对象初始化?

时间:2012-01-20 20:22:55

标签: javascript

更具体地说,对于具有两个公共属性的随机类,在C#中,您可以执行以下操作:

new Point() {
   Y = 0,
   X = 0
}

是否可以在JavaScript中执行类似的操作?我正在考虑以下方面的事情:

{
   prototype : Object.create(Point.prototype),
   X : 0,
   Y : 0
}

但我不认为它按预期工作。或简单的复制功能:

function Create(object, properties) {
    for (p in properties)
        object[p] = properties[p];

    return object;
}

所以对象初始化将成为:

Create(new Point(), {X : 0, Y : 0});

但是还有一个额外的对象创建。有没有更好的方法来实现这一目标?

5 个答案:

答案 0 :(得分:1)

对象文字可能是最接近的:

var point = {
    X: 0,
    Y: 0
};

答案 1 :(得分:1)

var Point = { /* methods */ };

Object.create(Point, {
    x: { value: 0 },
    y: { value: 0 }
});

当然在默认属性初始化上有点冗长,所以我倾向于使用extend实用程序。

extend(Object.create(Point), {
    x: 0,
    y: 0
});

答案 2 :(得分:1)

使用ES7:

class Point {
  x = 0;
  y = 0;
}

// {x: 5, y: 10}
const p = {...new Point(),  x: 5, y: 10 };

https://codepen.io/anon/pen/WaLLzJ

答案 3 :(得分:0)

没有什么通用的(符合您的要求),但您可以这样做:

function Point( x, y ) {
    this.x = x || 0;
    this.y = y || 0;
}

Point.prototype = { ... };

new Point( 1,2 );

答案 4 :(得分:0)

对于那些使用TypeScript进行编码的人,这是另一种方法:

创建基类:

export class BaseClass<T> {
    constructor(data?: Partial<T>) {
        Object.assign(this, data);
    }
}

扩展:

import { BaseClass } from './base.model';

export class Child extends BaseClass<Child > {
    Id: string;
    Label: string;
}

然后您可以执行以下操作:

const child = new Child({
    Id: 1,
    Label: 'My Label'
});