在查看其他一些线程后,继承看起来有点复杂。为什么getAge()函数不返回选项1中的this._age值?选项1和选项2之间的最佳做法是什么?
选项1
function Person(){
this._age = 21;
}
Person.prototype.getAge(){
return this._age;//undefined
}
var person = new Person();
person.getAge();
选项2
function Person(){
var _age = 21,
getAge:function(){
return _age;
}
}
最后,上述两者之间会有什么不同?
var person = new Person();
person.age = 21;
我可能会让自己感到困惑。
答案 0 :(得分:0)
试试这段代码:
var Person = function(){
this._age = 21;
}
Person.prototype.getAge = function(){
return this._age;
}
var person = new Person();
alert(person.getAge());
选项2:
var Person = function(){
this._age = 21;
this.getAge=function(){
return this._age;
}
}
var person = new Person();
alert(person.getAge());
答案 1 :(得分:0)
没有真正的“最佳实践”可言。第一个示例中的问题是一个简单的语法错误:
function Person(){
this._age = 21;
}
Person.prototype.getAge = function(){
return this._age; //21
}
var person = new Person();
person.getAge();
选项2也有很多语法错误。这里有太多详细内容。这是我所知道的这些概念的最佳解释:http://javascript.crockford.com/private.html
在选项1和第三个示例中,外部代码可以分别修改_age
和age
的值。也就是说,在选项1中,我可以一起去:
person._age = 1000;
这将实际更新对象中_age
的值。对于您尝试使用选项2执行的操作,没有在Person“class”(实际上是Object)之外声明的函数可以修改_age
的值,这可能是一件好事。上下文。
答案 2 :(得分:0)