dar*_*ong 1 javascript variables getter private
我想出了下面的情况:
function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
}
Run Code Online (Sandbox Code Playgroud)
现在我正在创建一个"Dog"类的新实例并打印变量的值.
var d = new Dog;
document.write('<strong>Dog age:</strong> ' +d.age); \\Outputs "1" as expected
document.write('<br/>');
document.write('<strong>Dog name:</strong> ' +d.name); \\Outputs "undefined" as expected, 'cause it's a private variable.
document.write('<br/>');
document.write('<strong>Get Dog name:</strong> ' +d.getName()); \\Outputs "Fido", as expected.
Run Code Online (Sandbox Code Playgroud)
但是,假设我想改变Dog的名字,如下所示:
d.name = "Stinky";
document.write('<br/>');
document.write('<strong>Dog name Again:</strong> ' +d.name);
document.write('<br/>');
document.write('<strong>Get Dog name Again:</strong> ' +d.getName());
Run Code Online (Sandbox Code Playgroud)
基于此,我提出了几个问题:
有任何想法吗?
这是一个让事情变得简单的fid.
d.name = "Stinky";正在向d对象添加一个新的(公共)属性,这是一个instanceOf Dog.
getter仍然使用值引用(private)变量Fido.
如果您想允许消费者更改私有变量,您还需要一个setter:
function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
this.setName = function (value) { name = value; }
}
var d = new Dog();
d.name; // undefined because there is no name public property
d.getName() // returns the internal private, "Fido"
d.setName('Stinky'); // the internal private is now "Stinky"
Run Code Online (Sandbox Code Playgroud)