Объект не работает должным образом - PullRequest
0 голосов
/ 09 ноября 2018

Я узнал о прототипе и прото, и я думаю, что понимаю, но это просто не имеет смысла? Может кто-нибудь объяснить мне, почему такой прямой доступ к объекту не работает.

function createObj() {
  this.name = 'user';
  this.prezime = 'user';
}

var obj1 = new createObj();

createObj.prototype.__proto__.toString = function () {
  return 'works';
}   //obj1.toString() returns 'works'   

createObj.__proto__.__proto__.toString = function () {
  return 'this works as well';
}   //obj1.toString() returns 'this works as well  '

//Then why this doesn't work: 

Object.toString = function () {
  return true;
}

Насколько я понимаю, я напрямую изменяю Объект object.

Так что, когда я делаю obj1.toString(), не должно ли это перейти к prototype и затем proto внутри prototype и найдите toString(), как это происходит из двух последних примеров?

1 Ответ

0 голосов
/ 09 ноября 2018

Это потому, что вы устанавливаете свойство в конструкторе Object , а не в Object прототипе , когда говорите Object.toString = ....

Попытка понять разницу между прототипом и конструктором в JavaScript

Если вы измените Object.toString = ... на Object.prototype.toString = ..., вы получите желаемый результат:

function createObj() {
  this.name = 'user';
  this.prezime = 'user';
}

var obj1 = new createObj();

createObj.prototype.__proto__.toString = function() {
  return 'works';
} //obj1.toString() returns 'works'   

console.log(obj1.toString());

createObj.__proto__.__proto__.toString = function() {
  return 'this works as well';
}

console.log(obj1.toString());

Object.prototype.toString = function() {
  return true;
}

console.log(obj1.toString())
...