gpt4 book ai didi

javascript - 为什么我不能使用 this.arguments,而参数有效?

转载 作者:行者123 更新时间:2023-12-02 19:33:00 25 4
gpt4 key购买 nike

function MyArray() {
var self = this.arguments; //<---
this.toString = function() {
return self;
};

}

var c = new MyArray(2, 3, 1, '232');
console.log(c.toString());

undefined

function MyArray() {
var self = arguments; //<---
this.toString = function() {
return self;
};

}

var c = new MyArray(2, 3, 1, '232');
console.log(c.toString());

[2,3,1,'232']

那么,为什么会这样呢? this.argumentsarguments 之间有什么区别?

最佳答案

在 JS 中,this 表示“调用上下文”,可以通过多种不同的方式设置它。它实际上与变量范围无关。它们是完全不同的概念。这就是为什么 arguments 可用作变量,但不能用作 this 的属性。

this 的值根据函数的调用方式而变化。

<小时/>

作为方法调用

例如,如果我这样做...

my_obj.myMethod();

...那么 this 将引用 my_obj,因为函数 myMethod 是从 my_obj 的上下文中调用的>.

<小时/>

作为函数独立调用

但如果我这样做...

var m = my_obj.myMethod;
m();

尽管 my_objmyMethod 与第一个示例的代码相同,但其值通常会更改为 global 对象。

<小时/>

使用 .call.apply 调用

还有其他几种方法可以设置此

m.call(my_other_obj, "more", "args");

m.apply(my_other_obj, ["more", "args"]);

使用.call.apply,传递的第一个参数将成为this的值。两者之间的区别在于其余参数的传递方式。

<小时/>

使用 .bind 创建

还有 .bind(),它以与 .call() 相同的方式获取参数,但使用 this< 创建并返回一个新函数 值和任何其他参数永久设置。

<小时/>

使用new运算符调用

最后一种方法是将函数作为构造函数调用。为此,您可以使用 new 运算符。

var new_obj = new m;

var new_obj = new obj.m;

在这两种情况下,this 的值都将是正在构造的新对象。除非所调用的函数已设置为用作构造函数,否则永远不要使用 new

关于javascript - 为什么我不能使用 this.arguments,而参数有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com