В третьем сообщении я привел такой же пример решения с помощью дополнительного свойства.
|
Цитата:
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, время: 21:54. |