首页 > js动态属性的思考?

js动态属性的思考?

在学习js高社的第4章的时候,有一段动态属性总结:我们只能给应用类型值动态地添加属性,而不能为基本数据类型添加属性。这时我想能不能动态的为函数、正则添加属性呢?已是写了一个测试例子:

var foo = function(){
}
foo.name = false;
console.log(foo.name);

结果是报undefined,也就是属性添加失败,我就感到不解,难道foo指向的不是应用类型嘛?那这不是和书上的结论有矛盾嘛。所以请求大牛指点我这个菜鸟。
ps:可以通过以下方式赋值属性。

//执行函数
var foo = function(){
    foo.status = false;
}
foo();
console.log(foo.status);

或者

//实例化函数
var foo = function(){
    //todo
}
var fooInstance = new foo();
fooInstance.status= false
console.log(fooInstance.status);

关键在于你选择了一个错误的属性名,javascript 中,每个 function 都会有一个内部属性,这个属性不可改变,比如

function hello() {}
console.log(hello.name)
// 输出 hello

但是你那个例子为什么没有输出呢……其实不是没有,而是输出了一个空字符串,因为你定义的是一个匿名函数,没有名字。

因为函数的名字不可被更改,所以你给 name 赋值虽然不报错,却也不起作用。

var foo = function(){
}
foo.test= false;
console.log(foo.test);

这段代码你就看得到效果了

补充

虽然 Function 对象的确是有一个不可改变的 name 属性,但是我在 ECMAScript Language Specification 里没有找到相关的定义…… 如果有谁找到了,麻烦跟我说一声呵,谢谢。


晕死,你所谓的“报undefined”只不过是console.log(...)返回值是undefined,难道你没看到在这个undefined之前还输出了一个false么?


这个明明是false嘛。。。
你把console.log的返回值当成它的输出结果了。

【热门文章】
【热门文章】