В ECMAScript 5 вы можете перехватывать операции get / set только для определенных именованных свойств (не для всех свойств) через Object.defineProperty
:
Object.defineProperty(someObj, "someProp", {
get: function() {
console.log("you tried to get someObj.someProp");
return "foo";
}
});
Здесь get
функция будет запускаться каждый раз, когда код пытается прочитать someObj.someProp
.
В следующем проекте ECMAScript 6 это будет возможно через прокси .Прокси имеет базовый целевой объект и функции set / get.Каждый раз, когда операция set или get происходит с любым из свойств прокси, соответствующая функция запускается, принимая в качестве аргументов целевой объект прокси, используемое имя свойства и значение, используемое при попытке set
.
var proxyHandler = {
get: function(obj, name){
console.log("you're getting property " + name);
return target[name];
},
set: function(obj, name, value) {
console.log("you're setting property " + name);
target[name] = value;
}
}
var underlyingObj = {};
// use prox instead of underlyingObj to use get/set interceptor functions
var prox = new Proxy(underlyingObj, proxyHandler);
Здесь установка значения свойства на prox
приведет к запуску функций set
/ get
.