2017-11-25 80 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