Object.defineProperty

153 阅读1分钟
var obj = { name: 'singing' }
Object.defineProperty(obj, "name", {
      configurable: true,
      get() {
        console.log("get");
        return obj.name;
      },
      set(name) {
        obj.name = name;
      },
    });

如上的数据劫持会发现在obj.name取值的时候,触发了getget里又再次obj.name千万死循环。因此正确写法应如下

let obj = { name: "singing" };
let name = obj.name;
Object.defineProperty(obj, "name", {
 configurable: true,
 get() {
   console.log("get");
   return name;
 },
 set(newName) {
   console.log("set");
   name = newName;
   return newName;
 },
});