Ada*_*dam 4 javascript loops object instance for-in-loop
我想使一些对象的属性被隐藏,一些属性在迭代时可见.所以我尝试使用原型,但这不起作用:
?function Car(){}
Car.prototype.version = '1.0';
var car_instance = new Car();
car_instance.make = 'BMW';
car_instance.model = 'x5';
for(property in car_instance){
document.body.innerHTML += property + '<br>';
}
Run Code Online (Sandbox Code Playgroud)
但这version也是输出:
make
model
version
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢这个想法隐藏某些功能/方法,但访问很容易像car_instance.version,而事实上,如果我太CONSOLE.LOG下,它有其他属性的对象原未列入在循环.
那我该怎么解决呢?
要创建私有变量,您必须在函数内部声明它,因为JS具有功能范围:
function Car(){
// private var
var version = '1.0';
// public var
this.foo = 'something';
}
Run Code Online (Sandbox Code Playgroud)
迭代对象时,用于hasOwnProperty仅获取实际的对象属性:
for(property in car_instance){
if (car_instance.hasOwnProperty(property)) {
document.body.innerHTML += property + '<br>';
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息:
http://javascript.crockford.com/private.html
如果您想从for in循环中“隐藏”实例的直接属性的属性,您可以使用Object.defineProperty:
Object.defineProperty(car_instance, "version", {
value: "1.0",
writable: true,
configurable: true,
enumerable: false // don't make it appear in a for in loop
});
Run Code Online (Sandbox Code Playgroud)