是否可以用类似C#的JavaScript进行对象初始化
Is it possible to do object initialization in JavaScript similar to C#?
更具体地说,对于具有两个公共属性的随机类,在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});
但是还有一个额外的对象创建。有没有更好的方法来实现这一点?
使用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
对于那些用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'
});
var Point = { /* methods */ };
Object.create(Point, {
x: { value: 0 },
y: { value: 0 }
});
当然,这在默认属性初始化方面有点冗长,所以我倾向于使用extend
实用程序。
extend(Object.create(Point), {
x: 0,
y: 0
});
对象文字可能是最接近的:
var point = {
X: 0,
Y: 0
};
没有什么通用的(满足您的要求),但您可以这样做:
function Point( x, y ) {
this.x = x || 0;
this.y = y || 0;
}
Point.prototype = { ... };
new Point( 1,2 );
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值