为什么我可以更新(公共)javascript方法的成员?

时间:2014-11-17 06:57:13

标签: javascript

为什么我们可以更新javascript对象的(公共)成员(方法或属性)的值,甚至在执行后(成员应该超出传统语言的范围)?

1 个答案:

答案 0 :(得分:0)

在JavaScript中,可以动态添加,删除或更改属性。

var obj = {
  member: function() {
    alert('Hi');
  }
};

obj.member(); // alerts 'Hi'
alert(obj.member); // alerts the definition of the anonymous function

obj.member = 42;
alert(obj.member); // now since the property is replaced, this alerts 42

在JavaScript中设计可以轻松添加或删除属性。这是因为JavaScritp是一种动态语言,不像Java或C#等静态语言。

现在让我们看一下当我们替换使用闭包的函数时会发生什么:

function MyObj() {
  var secret = 0;
  this.changeSecret = function() {
    secret++;
    alert('Secret is: ' + secret);
  }
}

var obj = new MyObj();
obj.changeSecret(); // alerts 'Secret is: 1'

// we are saving a reference for the (anomymous) function contained in 'changeSecret'
var changer = obj.changeSecret;

// and then replacing the changeSecret property with another function
obj.changeSecret = function() { 
  alert('I do not know the secret');
};

obj.changeSecret(); // alerts 'I do not know the secret'
changer(); // alerts 'Secret is: 2' the function still has access to variables
           // inside MyObj

第二个例子有效,因为JavaScript闭包。见How do JavaScript closures work?

相关问题