假设javascript中的函数实际上是对象,我如何在函数本身内为该函数对象赋值。
以下不起作用'this'关键字指的是窗口对象,因此'prop'将被分配给窗口全局对象而不是函数对象。
function test() {
this.prop = value;
}
为什么全局函数中的'this'关键字是指窗口对象而不是引用函数对象本身?
修改
我的问题与重复的问题有所不同,因为我在询问如何将属性分配给该函数内的全局函数,而不是变量的范围。
答案 0 :(得分:2)
按名称引用该功能:
function test(value) {
test.prop = value;
}
test('hello');
console.log(test.prop); // => "hello"

答案 1 :(得分:0)
简答:通过call
调用该函数,并将预期的this
作为第一个参数传递。
function test(value) {
this.prop = value
}
// 'this' v v value
test.call(test, 10)
console.log(test.prop) // 10
call
的目的是明确设置被调用函数的this
。
<强>解释强>
对于非严格模式,当调用函数而没有调用者时,例如test(10)
,this
被隐式设置为全局对象,在这种情况下{ {1}}。在严格模式下,它将是window
。
undefined
在函数内部,function test() {
return this
}
console.log(test()) // window (or undefined in strict mode)
指的是函数的调用者。
this
对于&#39;类&#39;同样(用const caller = {
test: function () { return this }
}
console.log(caller.test()) // caller, i.e., { test: function() {...} }
调用的函数)。
new
根据您的使用情况,最好使用此表单:
function MyConstructor() {
this.test = function() {
return this
}
}
const instance = new MyConstructor()
console.log(instance.test()) // instance of MyConstructor
或类似类的构造:
const myObj = {
test: function(value) {
this.prop = value
}
}
// 'prop' will be set on `myObj` instead of the function.
myObj.test(10)
console.log(myObj) // { prop: 10, test: function(value) {...} }