Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 堆和工厂模式中的本地对象_Javascript_Object_Return_Local_Factory - Fatal编程技术网

Javascript 堆和工厂模式中的本地对象

Javascript 堆和工厂模式中的本地对象,javascript,object,return,local,factory,Javascript,Object,Return,Local,Factory,这些是尼古拉斯·扎卡斯的书的摘录,我不清楚,请帮我理解 function setName(obj) { obj.name = “Nicholas”; obj = new Object(); obj.name = “Greg”; } var person = new Object(); setName(person); alert(person.name); //”Nicholas” 函数退出后,本地对象obj在堆中死了(当它返回obj时也是一样?) person和obj是作为堆中的单个对象相互

这些是尼古拉斯·扎卡斯的书的摘录,我不清楚,请帮我理解

function setName(obj) {
obj.name = “Nicholas”;
obj = new Object();
obj.name = “Greg”;
}
var person = new Object();
setName(person);
alert(person.name); //”Nicholas”
函数退出后,本地对象obj在堆中死了(当它返回obj时也是一样?)

person和obj是作为堆中的单个对象相互复制或引用的吗

他说:“当obj在函数中被覆盖时,它就变成了指针 本地对象。该本地对象在函数完成执行后立即被销毁”

然后,在中,他解释工厂模式如下:

function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        alert(this.name);
    };    
    return o;
因为现在o是本地对象,他说“一旦函数完成执行,本地对象就会被销毁”。所以当函数返回o,这是一个局部对象,如果i

var foo = createPerson(bla,18,student); 
然后foo是对一个本地对象的引用,该对象在那时必须是死的。请澄清“在函数中返回本地对象”的概念


很抱歉这篇文章太长,如果需要,请编辑和压缩mods。

setName
的第一行运行
obj
参考点时,指向在函数外部创建的
person
对象-此对象的名称设置为
Nicholas
。因此,在此阶段,obj是在函数外部创建的参考人员的副本

setName
的第二行运行时,本地
obj
引用被重新分配以指向一个新对象,因此当在第三行调用
obj.name
时,就是这个新对象的名称更改为
Greg
person
对象不受此名称更改的影响

在工厂函数中,说“本地对象在函数完成后立即被销毁”是不正确的,因为对对象的本地引用被销毁,但对象本身是在堆上创建的,并且仍然存在。如果工厂函数没有在最后一行
返回o
,则此对象将被垃圾收集,因为一旦函数返回,对它的引用将不存在,但是
o
不会被垃圾收集,因为函数返回了对它的引用