В третьем сообщении я привел такой же пример решения с помощью дополнительного свойства.
|
Цитата:
function F(x) {
if (this.constructor == F && !F.i) {
F.i = 1;
this.x = x;
}
return this.x;
}
var f = new F(3), obj = {x: 5};
alert(f.x); //3
alert(F.call(obj)); //5
alert(F.call(f)); //3
|
Так конструктор будет одноразовый
|
тфу, чуть не так хотел.
function F(x) {
if (this.constructor == F && !this.constructor.i) {
this.constructor.i = 1;
this.x = x;
}
return this.x;
}
var f = new F(3), obj = {x: 5};
alert(f.x); //3
alert(F.call(obj)); //5
alert(F.call(f)); //3
|
Так в этом случае
Цитата:
|
точно. забыл что конструктор это ссылка.
|
ну, пожалуй, последний мой вариант:):
function isEmptyObj(obj) {
var a; for(a in obj) {return false;}
return true;
}
function F(x) {
if (this.constructor == F && isEmptyObj(this)) {
this.x = x;
}
return this.x;
}
var f = new F(3), obj = {x: 5};
alert(f.x); // 3
alert(F.call(obj)); // 5
alert(F.call(f)); // 3
|
Только hasOwnProperty надо добавить.
|
| Часовой пояс GMT +3, время: 22:56. |