2017-11-25 59 views
1

Q1:有人可以解释如何触发setProperty中的setter,通过这种方式使用它的函数吗? Q2:如何获得setter中的最后一个键?JS defineProperty setter没有触发

fiddle is here

function test(root) { 

    Object.defineProperty(this, 'subtree', { 
    get: function() { 
     console.log("get"); 
     return root.subtree; 
    }, 
    set: function(value) { //doesn't triggered 
     console.log("set"); 
     root.subtree = value; 
    } 
    }); 

} 

var demo = new test({ 
    subtree: { 
     state: null, 
     test: 1 
    } 
}); 

console.log("START", demo.subtree); 

demo.subtree.state = 13; // doesn't triggered setter, but change object 

console.log("END", demo.subtree); 
+0

您可以使用get set函数,如demo.subtree.set({state:13,test:1})。 要获得setter中的键,每次使用setter时都要使用一个对象来存储。 – Danish

+0

丹麦语,结果:未捕获TypeError:demo.subtree.set不是函数。有任何想法吗? – Romario

+0

[请阅读说明书](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)。如果你没有找到答案,请回来。 – Whatever

回答

0

,使其更简单,这个代码

let variable = null; 
let obj = { 
    set variable(value) { 
     variable = value; 
    } 
    get variable() { 
     return variable; 
    } 
}; 

obj.variable = {a: 5}; 
console.log(obj.variable); 

不完全一样的东西,因为这一个

let variable = null; 
let obj = { 
    setVariable(value) { 
     variable = value; 
    } 
    getVariable() { 
     return variable; 
    } 
}; 

obj.setVariable({a: 5}); // equivalent to obj.variable = {a: 5} 
console.log(obj.getVariable()); // equivalent to obj.variable 

但后者清楚地表明这是怎么回事。

我们要访问a,并将其设置为某个值

console.log(obj.getVariable().a); // get a 
obj.getVariable().a = 6; // set a! 

请注意,我们不叫setVariable设置a的价值!这正是你的代码中发生的事情。您获得subtree并将state设置为13。要调用setter方法,你就以下

obj.setVariable({a: 6}); 
obj.variable = {a: 6}; // getter/setter example 
demo.subtree = {state: 13}; // your code 

Thisthis(通过你的链接)目前如何范围和拍摄工作,所以你应该把你的手放在一些书,涵盖了所有这些事情(或浏览左右,有(可能)有很多问题)。

+0

构建的对象,那么没有办法通过'tree.subtree = val'来运行setter?那么它如何在vue.js中工作? – Romario

+0

@Romario你是什么意思的'tree.subtree = val'?完整的代码示例可能? – Whatever

+0

Piotr,没有完整的代码,只有[从主题中拨弄](https://jsfiddle.net/2rbor3qr/)。试图理解JS框架是如何工作的,以及如何捕捉对象的变化,然后用它做一些魔术。 – Romario