对于每个函数,都有一个arguments
属性。
当我想设置它时,它不会取值。
我很好奇,内部实现的arguments
属性如何允许这种行为,我无法修改它?我想要实现的是实现一个无法在我的对象中修改的属性,有人可以告诉我如何实现它。
var a=function b(){
};
a.arguments="hello";
console.log(a.arguments); //still null
答案 0 :(得分:1)
您想查看Object.freeze()和Object.seal()
mozilla.org的例子
obj1 = {
internal: {}
};
Object.freeze(obj1);
obj1.internal.a = 'aValue';
obj1.internal.a // 'aValue'
// To make obj fully immutable, freeze each object in obj.
// To do so, we use this function.
function deepFreeze(obj) {
// Retrieve the property names defined on obj
var propNames = Object.getOwnPropertyNames(obj);
// Freeze properties before freezing self
propNames.forEach(function(name) {
var prop = obj[name];
// Freeze prop if it is an object
if (typeof prop == 'object' && !Object.isFrozen(prop))
deepFreeze(prop);
});
// Freeze self
return Object.freeze(obj);
}
obj2 = {
internal: {}
};
deepFreeze(obj2);
obj2.internal.a = 'anotherValue';
obj2.internal.a; // undefined
arguments
可以在函数内部修改,就像任何其他变量一样,因此它不像您想象的那样受到保护。在函数之外设置变量不会像参数那样在函数之外访问。我知道你想要的是什么,所以Object.freeze()和Object.seal()可能会让你感兴趣。
*
arguments
。如果您已经达到此页面,请参阅下面的*
保留arguments参数,为您提供传递给函数本身的参数。
考虑以下代码::
设置函数以将参数记录到控制台:
function test() {
console.log(arguments);
}
使用参数调用测试:
test('test');
<强>返回:强>
test
arguments
现在是测试函数原型的一部分,除非通过使用参数调用函数来设置它们,否则无法更改。
更清楚。您无法在Javascript中为参数添加默认值。我想这可能是你想要完成的事情。