2012-01-20 2 views
1

Более конкретно, для случайного класса с двумя открытыми свойствами, в C# вы можете сделать что-то вроде этого:Можно ли инициализировать объект в 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}); 

но есть создание дополнительного объекта. Есть ли лучший способ достичь этого?

+3

Что вы пытаетесь достичь (с точки зрения функциональности)? Javascript не C#. – Lekensteyn

+0

Копирование прототипа Point в новый объект при инициализации различных свойств этого объекта. –

ответ

1
var Point = { /* methods */ }; 

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

Конечно, это немного многословным при инициализации недвижимости по умолчанию, так что я, как правило, использовать extend утилиту.

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

литералы объектов, вероятно, ближе всего:

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

Но этот метод не копирует прототип Point. Это дилемма. –

0

Ничего общего (что соответствует вашим требованиям), но вы можете сделать это:

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

Point.prototype = { ... }; 

new Point(1,2);