man*_*439 4 javascript object node.js
我将深入研究 javascript 对象操作。这里我的问题是两者之间有什么不同const me = Object.create(person);,const me = person;这两个操作都给了我一个更小的输出。我的意思是它引用对象到新变量me。
const person = {
isHuman: false,
printIntroduction: function() {
console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
}
};
const me = Object.create(person);
me.name = 'Matthew';
me.isHuman = true;
me.printIntroduction();
const me2 = person;
me.name = 'Manan';
me.isHuman = false;
me.printIntroduction();Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我包含了直接操作assignment和使用分配Object.create();。这里两个变量都引用了 person 对象,但是它们之间有什么不同呢?有人能给我解释一下吗?这个问题可能以前被问过,但我找不到正确的解释。简单的解释将不胜感激:-)。
第一个区别是,当您使用常规赋值时,两个变量都指向同一个对象,当您编辑一个对象时,您也会编辑另一个对象。create 时不会发生这种情况。
const a = {};
const b = a;
b.do = 100;
console.log(a);
const c = Object.create(a);
c.dodo = 100;
console.log(a)Run Code Online (Sandbox Code Playgroud)
第二个区别是Object.create创建一个以第一个对象作为“原型”的对象。原型是 javascript 中对象和继承工作方式的基础,例如,当您有一个对象时,它的默认toString方法位于原型中。请看下面这个
const a = {do : 100};
const c = Object.create(a);
console.log(c.do);
console.log(a.hasOwnProperty("do"));
console.log(c.hasOwnProperty("do"));Run Code Online (Sandbox Code Playgroud)
如果您在浏览器控制台中运行上述命令,然后登录 c,您将看到该文件do位于__proto__of中c。不直接在c上。
每当你在 javascript 中有任何对象并调用它的属性或方法时,javascript 就会在该对象上搜索它,然后沿着原型链向上查找。这可以节省空间,因此并非每个对象都必须携带共享属性。
有趣的旁注,{}对象的原型中具有所有功能,但null并非如此
const a = Object.create(null);
// works as normal
console.log(a);
a.hello = "hello";
console.log(a);
// error
console.log(a.toString());
console.log(m + m);Run Code Online (Sandbox Code Playgroud)
编辑:抱歉,当您使用Object.create和编辑原始版本时出现轻微错误,您确实会看到更改出现在新版本的原型中。
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |