为了账号安全,请及时绑定邮箱和手机立即绑定

新手想在函数内定义一个对象,失败了?还有Function.prototype.prototype问题?

新手想在函数内定义一个对象,失败了?还有Function.prototype.prototype问题?

方块儿 2017-05-27 01:06:01
function a(){      var obj1 = {name:1}  }a();obj1       //在这里回车,所有代码写在CHORME F12内。最后会显示错误  obj1 is not defined。还有:Function.prototype是一个函数对象function(),那么Function.prototype.prototype为什么会是undefined呢?所有的函数对象都有prototype吧
查看完整描述

3 回答

?
7君

TA贡献2条经验 获得超0个赞

个人见解:

问题一:你这个写法,是js语言中创建对象中的工厂模式,你在函数体里面应该把obj1返回出来才行(return   obj1;),然后调用时var  xxx=a();用个变量接住它。

问题二:明确函数对象这个说法,Function 和Function.prototype不是一回事,前者是个函数,后者是个对象。只有函数(这个特殊的对象)才具有prototype这个属性(指针),Function.prototype不是个函数,它是个普通对象不具有prototype属性,所以调用后会出现undefined。

查看完整回答
反对 回复 2018-07-23
?
永夜君主

TA贡献11条经验 获得超2个赞

你想用构造函数的方式写对象,但是不是这样写的吧

function a(){  

    this.obj1 = {name:1}  ;

}



查看完整回答
反对 回复 2017-05-27
?
人笨嫌刀钝

TA贡献100条经验 获得超24个赞

第一个问题函数内可以写成obj1={name:1} 或者 window.obj1={name:1} ,都可以成功污染全局作用域

第二个问题Function是一个构造类,构造函数才指向自身,应该是Function.prototype.constructor.prototype

另外引擎实现的东西并不属于js了,应该是c++写得,所以function就有能看的prototype是不成立的。比如Object.toString

查看完整回答
反对 回复 2017-05-27
?
慕运维2284031

TA贡献11条经验 获得超2个赞

第一个问题的答案是作用域的问题 函数内定义的变量在函数外是不能访问的 但是函数外定义的变量在函数内可以访问 详情可以百度 JS作用域 第二个问题 我也不知道 不过可以百度 JS原型
查看完整回答
反对 回复 2017-05-27
  • 3 回答
  • 0 关注
  • 2099 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信