JS中 name 比较特殊吗?

JS中 name 比较特殊吗?

http://img1.sycdn.imooc.com//climg/5eaf7f3a090b180004250351.jpg

http://img1.sycdn.imooc.com//climg/5eaf7f5b0906538505280137.jpg

为什么name可以直接访问到  而age要通过stu1.age才可以?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,首先老师并未能复现同学说的“console.log(name)返回<empty string>”请同学仔细检查一下代码,老师这边测试结果如下。console.log(name)返回为空,并且,console.log(name)也未能测试出来返回xm这个结果。

http://img1.sycdn.imooc.com//climg/5ec0f8e809f54ebc18890749.jpg

之所以console.log(name);打印为空,是因为每个在构造函数都有prototype属性,每个prototype都有name,console.log(name);在解析的时候,会被认为是打印的是prototype的name,所以是空的。而你打印console.log(Person.prototype.name)输出undefined是因为你没有赋值。如下赋值才能有打印结果

http://img1.sycdn.imooc.com//climg/5ec101c60938f2f907210433.jpg

其实同学是没有必要去纠结console.log(name);的打印结果的,因为这个在实际开发中是用不到的,也不会涉及到。

祝学习愉快!

卡布琦诺 2020-05-07 11:07:04

同学你好,name不出错,age出错,是因为每个函数都有一个prototype属性,name是默认存在的,但age不是默认存在。可能老师上面的解释不够清晰,不好理解,这里不是说函数名是xm,是因为函数具有prototype属性,而name是默认存在的,语法如下:

http://img1.sycdn.imooc.com//climg/5eb37a8f09b0b7ae08560218.jpg

所以name是可以获取到的。

希望可以帮到你,祝学习愉快!

  • 提问者 gjkkj康康哦 #1
    为什么xm会被挂到了函数的prototype.name上呢?我这只是在实例化对象的时候把xm赋给了stu1对象,难道实例化对象的时候还能把构造函数的原型属性改了?
    2020-05-16 19:28:18
  • 提问者 gjkkj康康哦 #2
    我现在重新打了一遍 发现console.log(name)返回了<empty string>,又不一样了 按道理来说这个应该是对的 但是我确信我当时是没有打错的 我看了好几遍 它输出的就是xm,这就有点迷了
    2020-05-16 19:43:11
  • 提问者 gjkkj康康哦 #3
    还有为什么console.log(name)输出<empty string>而不是undefined或者null?,用console.log(Person.prototype.name)这个输出的就是undefined
    2020-05-16 19:46:59
卡布琦诺 2020-05-05 17:36:11

同学你好,因为name属于函数的默认属性,返回对应的函数名,所以可以访问。

祝学习愉快!

  • 提问者 gjkkj康康哦 #1
    是函数Person的默认属性吗? 为什么函数名会是xm呢?
    2020-05-05 18:30:51
  • 卡布琦诺 回复 提问者 gjkkj康康哦 #2
    老师在上面回复你了~
    2020-05-07 11:07:23
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师