我最近遇到了一些Javascript,其中一个变量正在一个方法中设置。除this
以外,它永远不会被宣布。以下是 very 简化示例:
'use strict'
var object = {
property1: 'value',
method: function() {
this.variable = this.property1;
},
}
object.method();
this.variable
在其他方法的整个对象中使用,但永远不会使用var
或let
声明,而且它不是object[key]
。
以这种方式传递变量是否有任何风险?
答案 0 :(得分:1)
以这种方式传递变量没有风险,除非你先运行object.method()。如果没有这样做,object.variable将返回undefined。 在这里你可以这样检查:
var object = {
property1: 'value',
method: function() {
this.variable = this.property1;
},
}
console.log(object.variable);
object.method();
console.log(object.variable);

console.log(object.variable);在object.method()之前调用的;将打印undefined。 您的代码也可以如下编写,它的行为也相同:
var object = {
property1: 'value',
method: function() {
object['variable'] = this.property1;
},
}
object.method();
console.log(object.variable);

答案 1 :(得分:0)
当您致电object.method();
时,它会将新属性variable
与object
原型相关联,当您执行object['variable']
时,它会返回您的值,因此它不会必须在设置值之前声明variable
。您可以使用object[key]
访问它。因此,使用这种方式没有风险。
var object = {
property1: 'value',
method: function() {
this.variable = this.property1;
},
}
object.method();
console.log(object['variable']);