Почему результат не такой, как я ожидал? - PullRequest
1 голос
/ 03 августа 2020

Я копирую этот фрагмент кода в консоль Chrome.

function F() {};
F.prototype.fMethod = function WOT() {console.log(this)};

function G() {};

Object.setPrototypeOf(G.prototype, {...F.prototype.fMethod, ...Object.prototype})

console.log(Object.getPrototypeOf(G.prototype));

То, что я ожидал Object.getPrototypeOf(G.prototype), было

{
function WOT, //the content/properties of the object `F.prototype.fMethod` points to.
constructor: ... //the content/properties of the object Object.prototype points to. 
hasOwnProperty: ...
isPrototypeOf: ... 
}

Вы можете увидеть, что я получаю на консоли Chrome здесь:

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 06 августа 2020

В строке

Object.setPrototypeOf(G.prototype, {...F.prototype.fMethod, ...Object.prototype})

Вы устанавливаете прототип G.prototype как пустой объект, потому что

// You are unpacking two objects
{
  ...F.prototype.fMethod, // is your WOT function which has no owned properties to unpack
  ...Object.prototype // which is an empty object
}
1 голос
/ 06 августа 2020

Кроме того, что неясно, чего вы хотите достичь, вероятно, наиболее близким к тому, чего вы хотите достичь, может быть:

function F() {};
F.prototype.fMethod = function WOT() { console.log(this) };

function G() {};

console.log(Object.prototype);

Object.setPrototypeOf(G, { ...F.prototype,
  // since Object.prototype is an empty object, next line is irrelevant
  ...Object.prototype
});

console.log(Object.getPrototypeOf(G));

Однажды я сказал, что настоятельно рекомендую вам уточнить, какая ваша цель, чтобы мы могли помочь вам найти лучший способ ее достижения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...