Systemname =
{
Question :
{
send: function()
{
console.log("send");
},
read: function()
{
console.log("read");
},
delete: function()
{
console.log("delete");
}
},
Answer :
{
send: function()
{
console.log("Answer sent");
}
},
Person :
{
foo: 'foo',
bar: 'bar',
add: function(name)
{
console.log('person "' + name + '" added');
},
remove: function(id)
{
console.log('person with id "' + id + '" removed');
}
}}
我正在学习oop是如何在js中工作的,我现在对私有方法和字段有点困惑。我希望在person部分有一些私人成员,比如'personCount‘或'lastAddedPerson’。如果我像这样添加它们:
Person:
{
personCount: 0,
lastAddedPerson: '',
...
}在person部分的开头,这些字段是公共的,可以用Systemane.Person.Field...我如何才能将它们设置为私有?方法也是如此。
感谢您的帮助。
发布于 2013-03-20 04:33:53
这里有一种方法。
function Person(n) {
var name = n;
this.getName = function() {
return name;
}
this.setName = function(newName) {
name = newName;
}
}
var person = new Person('roman');发布于 2013-03-20 04:35:40
在使用文本创建对象时,不能有私有属性或方法。实际上,JavaScript中没有私有属性,但实际上可以通过使用构造函数并将私有属性和方法声明为变量来实现:
function Person() {
var privteProperty = 1;
var privateMethod = function(){}
this.publicProperty = 2;
this.publicMethod = function(){}
}然后,您可以使用以下命令创建实例:
var john = new Person();发布于 2013-03-20 04:40:51
我喜欢使用一种工厂模式而不是new
var Person = (function() {
return {
create: function(name) {
return (function(n) {
var name = n;
function getName() {
return name;
}
function setName(newName) {
name = newName;
}
return {
getName: getName,
setName: setName
};
}(name));
}
};
})();然后:
var person = Person.create("Bob");
person.getName(); //returns Bob
person.setName("Jimbo");
person.getName(); //returns Jimo看起来很复杂,但其实很简单。
Person本质上被赋予匿名自调用函数的返回值。此返回值有一个名为create的属性,该属性是对另一个函数的引用,该函数或多或少地充当了一个构造函数。此函数还返回另一个匿名自调用函数的返回值。但是,此返回值是所需对象的实际实例。在这个匿名自调用函数中,您可以看到我有一个名为name的变量。此变量是匿名自调用函数的私有变量,并以词汇方式绑定到定义它的作用域。这意味着name的值被保存在该函数中。基本上,即使在函数执行完成后,它也会挂起。访问或修改该变量的唯一方法是通过getName和setName函数。
https://stackoverflow.com/questions/15509811
复制相似问题