2017-12-04 13 views
0
var a1 = new A("test") 
var a2 = new A("test2") 
console.log(a2.getOtherValue(a1)) // -> expected "test" 
a2.setOtherValue(a1, "test3") // set another object value 
console.log(a1.getValue()) // -> expected "test3" 

どのように私はこれを実装することができますに(それは同じinstanceofのだ)他のオブジェクトのプライベートメソッドにアクセスすることはできますか?は、どのように私はJavascriptを

+1

これは意味がありません。なぜa2のメソッドを呼び出してa1の値を読み込んだり変更したりするのですか? – marekful

+1

あなたが達成しようとしていることを説明しようとすることができれば、より良いものを提案することができます。 – Rajesh

+0

@marekful @Rajesh BigDecimal(1).add(BigDecimal(3)) 'add'メソッドは別の(BigDecimal(3))のプライベート値を取得する必要があります – ynifamily3

答えて

1

getterおよびsetterメソッドを使用してプロパティを作成し、addで独自の値を変更することができます。現在のオブジェクトを使って他のオブジェクトを変異させることは悪い考えです。続き

はサンプルです:

function MyNumber(value) { 
 
    var _value = value; 
 

 
    Object.defineProperty(this, 'value', { 
 
    get: function() { 
 
     return _value; 
 
    }, 
 
    set: function(v) { 
 
     if(!isNaN(v)) 
 
     _value = v; 
 
    } 
 
    }); 
 
} 
 

 
MyNumber.prototype = (function() { 
 
    var proto = {}; 
 
    proto.add = function(o2) { 
 
    if (o2 instanceof MyNumber) { 
 
     this.value = this.value + o2.value; 
 
    } else { 
 
     throw new Error('Mismatched type. Expected an object of type MyNumber but got ' + o2.constructor.name); 
 
    } 
 
    } 
 
    return proto; 
 
})(); 
 

 
var o1 = new MyNumber(10); 
 
var o2 = new MyNumber(20); 
 

 
o1.add(o2); 
 
console.log(o1.value); 
 

 
var o3 = { 
 
    value: 40 
 
} 
 

 
try { 
 
    o1.add(o3); 
 
} catch (ex) { 
 
    console.log(ex.message) 
 
}

+0

注:**あなたがこの答えに間違っていると思われる場合は、誤解を招く/誤った内容は、あなたの投票でコメントしてください。それが皆を助けるでしょう。 – Rajesh

+0

'Object.defineProperty'が私に影響を与えました。ありがとう。 – ynifamily3