Каково реальное использование прототипов? - PullRequest
0 голосов
/ 27 августа 2018

eg1

<script>

let obj = function(){};
obj.age = 100;
console.log(obj.age);

</script>

ВЫХОД: 100

eg2.

let obj2 = function(){
  a:"Breaking Benjamin"
};

let obj2 = function(){};
let o = new obj2();
obj2.prototype.age = 100;
console.log(o.age);

ВЫХОД: 100

В примере 1 я использую obj.age = 100, что дает вывод 100 и в примере 2 я использую obj2.prototype.age = 100;который дает одинаковый результат 100. Так в чем же разница между обоими?Какой из них я должен использовать?

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Если вы тестируете его с одним экземпляром объекта, это может быть неочевидно, поэтому протестируйте его с двумя объектами:

let obj2 = function(){};
let o1 = new obj2();
let o2 = new obj2();
obj2.prototype.age = 100;
console.log(o1.age);
console.log(o2.age);

Если вы измените прототип, то он повлияет на все экземпляры obj2.

Если вы измените его только на o1, то ондействует только на o2:

let obj2 = function(){};
let o1 = new obj2();
let o2 = new obj2();
o1.age = 100;
console.log(o1.age);
console.log(o2.age);

Какой из них использовать?

Это зависит от варианта использования, но, безусловно, всегда неверно:

let o = new obj2();
obj2.prototype.age = 100;
console.log(o.age);
0 голосов
/ 27 августа 2018

В javascript при создании объекта / функции движок JavaScript добавляет свойство прототипа к функции.Это свойство прототипа является объектом, который называется объектом-прототипом и по умолчанию имеет свойство конструктора.Свойство конструктора указывает на функцию, для которой объект-прототип является свойством.

0 голосов
/ 27 августа 2018

Таким образом, в первом примере возраст установлен на уровне объекта и доступен только через этот объект.

Во втором примере, поскольку прототип содержит возраст, другой объект того же типа(obj2) также может получить тот же возраст.См. Пример ниже,

let o2 = new obj2(); // inherits the state from the prototype viz obj2

console.log(o2.age); // outputs 100

Другими словами, вы устанавливаете значения на уровне прототипа / класса, к которым могут обращаться другие объекты, созданные из этого же прототипа.

...