function createPerson(name){ var obj = new Object(); obj.name = name; obj.showName = function(){ alert( this.name ); }; return obj; } console.log(createPerson('')==createPerson(''),"obj");//显示为false说明是两个不同的对象 createPerson('小明'); createPerson('小强');//1、现在我想证明“小强”的创建没有覆盖“小明”需要证明操作的?2、或者说是createPerson('小明');的创建之后一直是保存在内存中的,我需要证明和查看呢?</script>
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
我觉得应该是这样:
var a = createPerson('小明')
var b = createPerson('小强')
console.log(a)
console.log(b)
console.log(a.showName === b.showName) //false
以 var a = createPerson('小明') 为例,执行 createPerson 函数,在函数内部创建新对象,然后把属性和方法都挂载在新对象之后,返回这个对象。
第二次也是同样的道理,每次都是 new 一个空的对象,赋值后返回。
a 和 b 这两个对象是没有关联的。
修改一下答案,我明白你的问题了,是这样的:
执行 a = createPerson('小明') 之后,a 得到的是这个函数返回的对象,执行时会进入这个函数的上下文,执行之后,这个上下文是被销毁掉的,在全局上下文只有这个函数的声明。
不知道你懂了没,就是执行 a = createPerson('小明') 并不是把值和引用给 a。
如果要把引用给 a,应该是这样写的:
a = createPerson
如果想把函数的值给 a,需要进行对象拷贝,这个我也不是很了解,你查一下资料吧。
添加回答
举报
0/150
提交
取消