更具体地说,对于具有两个公共属性的随机类,在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});
但是还有一个额外的对象创建。有没有更好的方法来实现这一目标?
答案 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 };
答案 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'
});