Hello社区这是一个简单的问题。
有人能告诉我为什么这个打印“未定义”?
function Person(first,last,age) {
this.firstname = first;
this.lastname = last;
this.age = age;
var bankBalance = 7500;
}
// create your Person
var john = new Person ('John','Doe',33);
// try to print his bankBalance
document.write (john.bankBalance);
在最后一行我想打印john.bankBalance是7500 谢谢!
答案 0 :(得分:2)
由于this
的范围仅在构造函数中,您需要添加bankBalance
。你可以这样做:
this.bankBalance = 7500;
或者,您可以为bankBalance
设置一个getter / setter,如下所示:
this.getBalance = function() {
return bankBalance;
}
this.setBalance = function(balance) {
bankBalance = balance;
}
以下是JSFiddle演示了本地变量bankBalance
的getter和setter的函数。
这是另一个带有'public'bankBalance
变量的JSFiddle,可以作为实例变量进行访问。
答案 1 :(得分:1)
bankBalance仅在功能范围内可用。如果您想公开访问,则应使用" this"就像你使用firstname和lastname一样。
答案 2 :(得分:0)
bankBalance它只限于构造函数。如果要将其作为实例变量访问,则需要像this.firstname
et那样声明它。人。
答案 3 :(得分:0)
这是因为Javascript的特性称为闭包。它基本上意味着如果对象是嵌套的,那么内部对象只能从它们之外的对象访问变量。通过使用this关键字,您实际上使变量成为该对象的属性。使用var声明的变量将无法访问布局该方法的对象。有趣的阅读请查看此链接
http://javascript.crockford.com/private.html
以下是具有私有变量和一些公共方法和属性的对象的示例。这些特性非常有用,因为它们限制了对象的使用。在下面的这个例子中,我们可能不希望开发人员篡改数组,因此我们可能只是给他们一个添加工具,删除工具,他们只能看到偶数索引: -
function SpecialArray() {
var _array = [];
this.length = _array.length;
this.add = function(stuff) {
// add some stuff to it
}
this.remove = function(stuff) {
// take some stuff out of it
}
this.displayEvenNumbers = function(){
for (var i=0; i< _array.length ; i+=2){
console.log(_array[i]);
}
}
}