如何从该函数内部将属性分配给全局函数

时间:2018-06-08 16:16:31

标签: javascript function object

假设javascript中的函数实际上是对象,我如何在函数本身内为该函数对象赋值。

以下不起作用'this'关键字指的是窗口对象,因此'prop'将被分配给窗口全局对象而不是函数对象。

function test() {
    this.prop = value;
}

为什么全局函数中的'this'关键字是指窗口对象而不是引用函数对象本身?

修改

我的问题与重复的问题有所不同,因为我在询问如何将属性分配给该函数内的全局函数,而不是变量的范围。

2 个答案:

答案 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) {...} }