javascript - js动态属性的思考?
伊谢尔伦
伊谢尔伦 2017-04-10 14:36:00
[JavaScript讨论组]

在学习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);
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
阿神

关键在于你选择了一个错误的属性名,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 里没有找到相关的定义…… 如果有谁找到了,麻烦跟我说一声呵,谢谢。

高洛峰

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号