关于创建的对象在内存中怎么查看?

13486029303
  • 294
     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.2k
2 个回答

我觉得应该是这样:

var a = createPerson('小明')
var b = createPerson('小强')
console.log(a)
console.log(b)
console.log(a.showName === b.showName) //false

var a = createPerson('小明') 为例,执行 createPerson 函数,在函数内部创建新对象,然后把属性和方法都挂载在新对象之后,返回这个对象。
第二次也是同样的道理,每次都是 new 一个空的对象,赋值后返回。
ab 这两个对象是没有关联的。


修改一下答案,我明白你的问题了,是这样的:
执行 a = createPerson('小明') 之后,a 得到的是这个函数返回的对象,执行时会进入这个函数的上下文,执行之后,这个上下文是被销毁掉的,在全局上下文只有这个函数的声明。
不知道你懂了没,就是执行 a = createPerson('小明') 并不是把值和引用给 a
如果要把引用给 a,应该是这样写的:

a = createPerson

如果想把函数的值给 a,需要进行对象拷贝,这个我也不是很了解,你查一下资料吧。

函数内部obj重写之后,变量obj是一个局部的对象,函数执行完成之后就会立即销毁的

var a = createPerson('小');
var b = createPerson('小');
console.log(a);
console.log(b);
console.log(a.name === b.name); //true
宣传栏