2017-12-08 19 views
0

をオーバーライドするために参照することにより関数を渡します私はまだ方法を置き換えることができます:jsが、私は、関数をオーバーライドするデコレータを持ってそれを

function decorator(target, key, descriptor) { 
    replaceMethod(descriptor.value) 
} 

function replaceMethod(originalMethod) { 
    originalMethod = function() { 
     console.log('overridden') 
    } 
} 

これはどういうわけか、このようにすることはできますか?これはあなたの目的を満足させる可能性がある

+1

をいいえ。 JavaScriptはそれを持っていません。 –

+1

'descriptor.value'はこれは関数ですか?あなたはそれを無効にしたいですか? –

+1

あなたの説明は曖昧です。最初の例では、デコレータ自体のプロパティに書き込む一方、デスクリプタのプロパティに書き込んでいます。 – Nit

答えて

2

function decorator(target, key, descriptor) { 
    replaceMethod(descriptor, 'value') 
} 

function replaceMethod(obj, prop) { 
    obj[prop] = function() { 
     console.log('overridden') 
    } 
} 
1

これは動作します:

function bark(target, key, descriptor) { 
    replaceWith(descriptor, function(msg){ 
     console.log("Woof!"); 
    }); 
    return descriptor; 
} 

function replaceWith(descriptor, value){ 
    descriptor.value = value; 
} 

class Animal { 
    @bark 
    greet(msg) { 
     console.log(msg); 
    } 
} 

new Animal().greet("Hello"); 

https://jsfiddle.net/DerekL/0sd9Lvs0/

関連する問題