Javascript arguments属性可由此访问。某些函数。arguments?事实上我无法解释?
我在读一本JavaScript书籍,我在读如何通过原型扩展JavaScript数组的数组功能,然后我来到了这个我无法理解的示例,没有对它进行深入的解释,我无法理解:Javascript arguments属性可由此访问。某些函数。arguments?事实上我无法解释?,javascript,Javascript,我在读一本JavaScript书籍,我在读如何通过原型扩展JavaScript数组的数组功能,然后我来到了这个我无法理解的示例,没有对它进行深入的解释,我无法理解: Array.prototype.some_function = function(){ var args = this.some_function.arguments; // 1 var args_length = this.some_function.arguments.leng
Array.prototype.some_function = function(){
var args = this.some_function.arguments; // 1
var args_length = this.some_function.arguments.length; // 2
...
} // some_function
在这里我可以访问参数,但我不知道这是如何工作的,意思是指我们调用这个方法的对象(在这个上下文中是数组),然后一些函数指的是该对象的属性,意思是指我们正在实现的函数,但是参数不是这个函数的静态属性,那么它是如何工作的呢?它仅在调用上下文中有效,我无法将其用于其他情况,例如:-
this.some_other_function.arguments // gives error
这似乎是JavaScript的一个不推荐的特性。请参阅说明以下内容的文档: 已弃用 此功能已从Web标准中删除。虽然有些 浏览器可能仍然支持它,它正在被删除。 不要在旧项目或新项目中使用它。使用它的网页或Web应用程序可能会 随时休息 这种行为确实出乎意料。这可能就是它被弃用的原因。正如您所说,函数是一个静态对象,那么它怎么可能有动态的
参数
?好吧,我想除了显而易见的解释之外没有其他解释了:JavaScript引擎在每次调用之前将参数
值分配给函数
顺便说一句,有一个更简单的代码演示了相同的情况:
function f() { return f.arguments; }
f(8); // returns [8]
f(8, 9); // returns [8, 9]
f.arguments === null // true
当然,解决方案是使用局部变量
参数
而不是函数参数
,请参阅。参数对象可作为局部变量用于所有函数。您可以在函数内使用参数对象,但不能通过实例访问它们。
通过function.arguments访问参数是javascript提供的一种奇怪的功能,目前已被弃用。
基本上,当您执行function.arguments时,它会给出堆栈中当前执行的函数的arguments变量。 尝试浏览我的代码并阅读控制台。。为了更清楚
var someconstructor=function(){
log('someconstructors参数');
log(参数);
//SomeConstructor当前正在堆栈中执行
//通过function.arguments访问其参数
log('someconstructors参数使用function.arguments进行访问');
log(someconstructor.arguments);
};
someconstructor.prototype.method=函数(){
log('methodarguments');
log(参数);
//方法正在堆栈中执行
//通过function.arguments访问其参数
log('使用function.arguments访问的方法参数');
log(this.method.arguments);
};
var newObject=newsomeconstructor(1,2);
方法(1,2,12,23,23,232,3)代码>JavaScript的主要概念是“一切都只是一个对象”,因此数组是一个具有原型和构造函数的对象
任何声明为对象属性的函数都称为方法,参数是您在函数内部传递的参数,例如:
function Add(a,b)
{
console.log(this.arguments) // logs an array-like of [a,b]
return a+b;
}
方法定义在哪里?仅在原型范围内,这意味着您无法在其他地方访问方法属性,除非您将方法本身或其构造函数传递给该其他范围
你可以参考科迪·林德利(cody lindley)写的一本名为《JavaScript简明》的书,这本书需要一些关于JavaScript的高级知识
根据
此功能已从Web标准中删除。虽然有些
浏览器可能仍然支持它,它正在被删除。
不要在旧项目或新项目中使用它。使用它的网页或Web应用程序可能会
随时休息
这难道不能回答您的问题吗?下面的评论很有启发性:“在递归的情况下,即如果函数f在调用堆栈上出现多次,则f.arguments的值表示对应于函数最近调用的参数。”