我在理解JavaScript中的函数范围时遇到了一些麻烦:
function Person() {
var _firstName;
var _lastName;
}
personOne = new Person();
personOne._firstName = "Fred";
alert(personOne._firstName);
Run Code Online (Sandbox Code Playgroud)
这输出"Fred",但我认为Person函数的变量只能在函数内部访问.它为什么有效?
在JavaScript中,对象是可动态扩展的.
例如:
var obj = {};
obj.firstName = "Matías"; // <-- This adds the property even if it doesn't exist
Run Code Online (Sandbox Code Playgroud)
另一方面,如果要声明属性应该是构造函数中对象的一部分,则需要使用以下内容对它们进行限定this
:
function Person() {
this._firstName = null;
this._lastName = null;
}
Run Code Online (Sandbox Code Playgroud)
如果要避免对象动态扩展,可以使用ECMA-Script 5 Object.preventExtensions
函数:
var obj = {};
Object.preventExtensions(obj);
// This property won't be added!
obj.text = "hello world";
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
121 次 |
最近记录: |