Właściwość nazwanych danych wiąże nazwę z wartością. Co oznacza, że używasz tej właściwości, aby pobierać i pobierać dane bezpośrednio, na przykład z pola publicznego w klasie.
Nazwana właściwość accessor kojarzy nazwę z jedną lub dwiema funkcjami akcesora. Funkcje akcesora służą do zapisywania lub pobierania wartości powiązanej z właściwością. Co oznacza, że ograniczasz dostęp do określonej wartości za właściwością get lub/i set accessor.
Porównywanie obu opcji 1. nie zapewnia hermetyzacji ani rodzaju kontroli, w jaki sposób uzyskuje się dostęp do wartości. Drugi pozwala ci określić, czy twoja wartość może być odczytana jako "uzyskaj dostęp", napisany "zestaw accessor" lub oba.
UPDATE
Odnośnie swojej wtórnym wątpliwości (w komentarzach) tutaj jest trochę i szybkie 101 na podstawach ECMA Script że ja właśnie gotowane;):
// accounting namespace
var Accounting = {};
// client class definition
Accounting.Client = function(){
// private fields
var _address="";
var _phone=0;
// data property
this.token = "";
// privileged properties
Object.defineProperty(this, "address", {
get: function(){
if(console) console.log('hey im using get address accessor property.');
return _address;
},
set: function(value){
if(console) console.log('hey im using set address accessor property.');
if(value == null)
throw new Error('Field address cannot be null!');
_address=value;
}
});
Object.defineProperty(this, "phone", {
get: function(){
if(console) console.log('hey im using get phone accessor property.');
return _phone;
},
set: function(value){
if(console) console.log('hey im using set phone accessor property.');
_phone=value;
}
});
};
Accounting.Client.prototype = {
sayHello: function(){
alert("hello im a shared function, which means im shared by all objects of type Client"
+ " and i do not have access to private fields :(.");
}
};
/* use case */
var c1 = new Accounting.Client();
c1.address = "Rua da Capela";
c1.phone = 961909090;
c1["token"] = "mytoken in a data property";
c1.token = c1.token + "-111";
alert("client address is '" + c1.address + "' and his phone also is '" + c1.phone + "'.");
c1.sayHello();
alert(c1.token);
try{
// check non nullable field.
c1.address=null;
}
catch(ex){
alert(ex);
}
Użyj mojego jsfiddle bawić się!
Happy Coding!
Czy próbowałeś nawet przeczytać o tym, zanim poprosisz kogoś o powtórzenie tego, co mówi spec? – Touffy
@ Touffy Tak, czytam specyfikację ecmascript, ale nadal nie rozumiem, w jaki sposób właściwość accessor może przechowywać dane bez wartości atrybutu i różnicy między właściwością danych a właściwością akcesora. – ringord
Zobacz https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Description –