将属性添加到函数中
您可以将属性分配给函数,但这是个好主意吗? 在这个例子中,我表现出你不能创建属性里面的的功能,但你可以以外的它。将属性添加到函数中
问:是否将一个可疑问题视为JavaScript编程实践?
function a() {
a.bad = 1
}
a.questionable = 2
function d() {
console.log(a.bad)
console.log(a.questionable)
}
d()
在这个例子中,我显示你不能创建一个属性到函数中的函数,但你可以在它之外。
实际上并非如此。您可以在任何有引用的地方将属性添加到函数中。问题是你没有拨打a()
,所以线路a.bad = 1
从来没有机会运行。
function a() {
a.bad = 1
}
a.questionable = 2
function d() {
console.log(a.bad)
console.log(a.questionable)
}
a()
d()
问:
a.questionable
认为是一个好的JavaScript编程实践中?
jQuery非常广泛地使用它(想想jQuery.fn
,jQuery.extend
等)—所以不,我不认为它本身被认为是一种“不好”的编程习惯。事实上,在ES6将它们作为class
syntax的一部分引入之前,向构造函数添加属性是模仿静态字段和方法的唯一方法。
function Constructor() {
}
Constructor.staticMethod = function() {
return "I'm a static method!"
}
Constructor.staticProperty = "I'm a static property!"
console.log(
Constructor.staticMethod(),
Constructor.staticProperty
)
糟糕。对于那个很抱歉。 –
激发它的优良放在功能性。事实上,这正是ES6类的静态方法,这是static
的唯一用法;考虑明确的语言支持。
class Foo {
static bar() {}
}
'bar' in Foo // true
typeof Foo // 'function'
在这个例子中,我展示你不能创建一个属性里面的函数的函数,但是你可以在外面了。
您可以在该函数内的某个函数上创建一个属性,但期望函数的主体在未调用的情况下运行是不合理的。
糟糕。对于那个很抱歉。 –
它不应该是'this.bad = 1'呢?由于'a'在函数范围 –
^no中是未定义的,所以除非'a'是构造函数 – Damon
在函数内部创建属性同样适用 - 您从来没有调用过'a()'来运行它。在调用'd()'之前,将'a();'添加到您的代码中,您将为'a.bad'获得'1'输出。 – freginold