2017-06-19 5 views
0
var vehicle = function(){ 
var type; 
var tyre; 

this.tellTyres = function(){ 
    console.log(type + " has " + tyre + " tyres"); 
}; 

this.__defineGetter__("type", function(){ 
    return type; 
}); 
this.__defineSetter__("type", function(val){ 
    type = val; 
}); 
this.__defineGetter__("tyre", function(){ 
    return tyre; 
}); 
// this.__defineSetter__("tyre", function(val){ 
//  tyre = val; 
// }); 

}; 

var car = new vehicle(); 
car.type = "Car"; 
car.tyre = 4; 

console.log(car.tyre); 

car.tellTyres(); 

私はゲッターとセッターについて学んでいました。次に、setterメソッドを持たずにcar.tyreの値を設定している間にJavascriptでエラーが発生していないことがわかりました。javascriptでセッターなしのオブジェクトプロパティを設定するとどうなりますか

コンストラクタ外のcar.tyreプロパティはどうなりますか?値4はどこにありますか?それは上書きされますか?

+0

Ohとconsole.logが "undefined"を出力します。うーん...なぜそう? –

+1

学習している場合、この機能 '__defineGetter__'は廃止されました。代わりに' Object.defineProperty() 'を使用してください。 – Agalo

+0

本はECMAScript 3.1で導入されました。話してくれてありがとう... defineProperty()について探求します。あなたは 'defineSetter'メソッドに何があるのか​​手掛かりはありますか? –

答えて

1

JavaScriptオブジェクトは、Javaオブジェクトと同じような辞書です。

var obj = { foo: 'bar' }; 
obj.baz = 17; 
console.log(obj.foo, obj.baz); // logs '"bar" 17' 

をそして、それは絶対に大丈夫です:これは、あなたが設定し、ちょうどプロパティアクセサ事業者.[]を使用して、オブジェクトのプロパティを得ることができることを意味します。

しかし時々、あなたのオブジェクトのプロパティを変更するたびに何かしたいと思うことがあります。これらのケースでは、あなたが(代わりにdefineGetterdefineSetterObject.definePropertyを使用)、そのプロパティのゲッターやセッター関数を定義:

var obj = { foo: 'bar' }; 
 
Object.defineProperty(obj, 'baz', { 
 
    get: function() { 
 
    console.log('Someone wants to read the property "baz"!'); 
 
    return 34; 
 
    }, 
 
    set: function (value) { 
 
    console.log('You are not allowed to modify the property "baz"!'); 
 
    } 
 
}); 
 

 
obj.baz = 17; // doesn't work 
 
console.log(obj.foo, obj.baz); // logs '"bar" 34'

あなたがnew vehicle()を作成するとき、あなたは新しいオブジェクトを作成し、上プロパティを設定または読み取ることができます。ゲッターやセッターは必要ありません。

+0

ありがとうございます。 :)最後の行に// logs bar 17を書きました。それは34でなければなりません。私がコードを実行するまで私はほとんど混乱していました。とにかく、ありがとう。 –

+0

はい、そうです。私は答えを編集しました。 – PeterMader

関連する問題