Ami*_*ena 0 javascript arguments function parameter-passing
我有一个人的代码,用于设置新对象的名称.
function setName(human) {
human.name = "Nicholas";
human = new Object();
human.name = "Greg";
};
var newPerson = new Object();
setName(newPerson);
console.log(newPerson.name);
Run Code Online (Sandbox Code Playgroud)
我想使用person对象的属性'name'的值.
我期待价值是'格雷格',但我得到'尼古拉斯'.
这是我的理解:'human'是指向Object的指针.调用该函数时,将通过newPerson的名称创建指向同一Object的另一个指针.
newPerson对象的'name'属性将设置为'Nicholas'.然后,在函数的第二行中创建另一个newPerson对象.因此,应该销毁第一个实例.然后,此新Object的'name'属性将设置为'Greg'.我哪里错了?
将具有对象值的变量视为这些对象的句柄.
var newPerson = new Object();
Run Code Online (Sandbox Code Playgroud)
您创建了一个新对象及其句柄newPerson.
setName(newPerson);
function setName(human) {
Run Code Online (Sandbox Code Playgroud)
当setName被调用时,newPerson被复制到human.所以现在你有两个引用相同对象的句柄.事实上,它们实际上都可以在函数内部访问,但这对讨论来说并不重要.
human.name = "Nicholas";
Run Code Online (Sandbox Code Playgroud)
引用的对象human具有新名称.由于human和newPerson仍然处理同一个对象,newPerson.name现在已经改好了.
human = new Object();
Run Code Online (Sandbox Code Playgroud)
现在手柄发散了.newPerson仍然继续成为尼古拉斯的手柄,但human成为新对象的手柄.
human.name = "Greg";
Run Code Online (Sandbox Code Playgroud)
而这个新对象的名字是格雷格.这不会以任何方式影响尼古拉斯.
};
console.log(newPerson.name);
Run Code Online (Sandbox Code Playgroud)
newPerson 仍然是尼古拉斯的处理.
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |