Как получить сам объект в пользовательской функции Object.prototype.xxx?

Object.prototype.getB = function() {

  // how to get the current value a
  return a.b;

};
const a = {b: 'c'};
a.getB();

Как видите, я хочу сделать функцию для всех значений объекта. И мне нужно получить значение объекта в этой функции, а затем сделать что-то.

1 ответ

Решение

Тело функции должно вернуться this.b, Вы можете получить сам объект с this ключевое слово, которое работает так только в правильном выражении функции, а не в функции стрелки.

Если вы действительно хотите изменить прототип, это лучший способ, который заранее проверяет существование функции и делает дескриптор свойства более соответствующим существующим методам:

if(!Object.prototype.hasOwnProperty("getB")){
  Object.defineProperty(Object.prototype, "getB", {
    enumerable: false,
    writable: true,
    configurable: true,
    value: function getB(){
      return this.b;
    }
  });
}

В качестве альтернативы, если поддерживаются сокращенные имена методов в ECMAScript 6, этот подход немного лучше, так как getB неконструктивный метод, который еще более соответствует существующим методам.

if(!Object.prototype.hasOwnProperty("getB")){
  Object.defineProperty(Object.prototype, "getB", {
    enumerable: false,
    writable: true,
    configurable: true,
    value: {
      getB(){
        return this.b;
      }
    }.getB
  });
}
Другие вопросы по тегам