Как получить сам объект в пользовательской функции 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
});
}