Можно ли сделать свойство по умолчанию у объекта?

120
27 апреля 2019, 22:30

Допустим, у меня есть объект:

var obj = {
  name: "object",
  height: 12,
  default: false
}

Можно ли сделать так, чтобы, когда я ссылаюсь на объект была ссылка не на объект(obj), а на, допустим, свойство default(obj.default), но когда я ссылаюсь на свойства/методы объекта, то все работало нормально? Например так:

var t = obj; 
alert(t == obj.default) //true
var y = obj.name; 
alert(y == obj.name) //true
Answer 1

Можно

Но довольно костыльно.

var initialObject = { 
  name: "object", 
  height: 12, 
  default: false 
} 
 
// Создаем переменную obj, которая равна желаемому значению по умолчанию 
var obj = initialObject.default; 
 
// Прототипу объекта obj (в данном случае это Boolean) подменяем прототип на желаемый 
Object.setPrototypeOf(Object.getPrototypeOf(obj), initialObject); 
 
// Теперь, обращаясь к obj будет возвращено значение по умолчанию (потому что мы прямым текстом его установили в стр. 8) 
console.log(obj); 
 
// А при обращении к одному из свойств объекта initialObject (по сути, объекта obj), оно будет взято из цепочки прототипов (если будет найдено, конечно) 
console.log(obj.height); 
 
// Однако сразу же заметны подводные камни: поскольку мы заменили прототип глобального Boolean, то теперь любой объект, созданный соответствующим конструктором будет иметь в качестве прототипа initialObject 
var drawback = (function(){return true}()).name; 
console.log(drawback); 
// или даже еще проще: console.log(new Boolean(true).height);

Answer 2

Как на счет классов?

function Obj(name, height) {
    this.name = name;
    this.height = height;
}
let defaultObj = new Obj(); //пустой Obj со свойствами name, height равными undefined
let customObj = new Obj("Ваня", "183"); //заполненный Obj
customObj.name; // "Ваня"
READ ALSO
Google script не находит таблицу по имени

Google script не находит таблицу по имени

Есть некий скрипт, который должен получить из запроса POST параметры и записать их в таблицу Google SheetВот код скрипта:

161
Draggable - Приклеить эллемент

Draggable - Приклеить эллемент

Как сделать, что бы эллемент #drag приклеивался к внутринним границам agame-board и собственно элемменты(#drag) приклеивались друг к другу

197
Валидация regExp

Валидация regExp

Просьба помочь сделать валидацию поискачто у меня : символы которые я хочу отсеиваются,НО если первоначально ввести пробел - то выскакивает...

211