JavaScript的Object.create方法

时间:2016-04-26 06:41:49

标签: javascript prototype

我创建了一个如下对象

 var lassie = {
 name: 'Lassie',
 breed: 'Collie',
 speak: function () {
 return 'Woof! Woof!'; }
 };

我使用javascript的Object.create方法创建另一个对象

var obj = Object.create(lassie);

现在当我控制 obj 时,它给了我一个空白对象。 但当我控制 obj.speak()时,它给了我' Woof! Woof!'

有人可以解释一下原因吗?

4 个答案:

答案 0 :(得分:1)

基本上Object.create将创建一个没有自己属性的对象。这意味着传递的对象自己的属性将被指定为新创建的对象的原型属性,并将返回。

Object.create()

返回的对象的示例结构
var obj = {a:10};
var obj1 = Object.create(obj);
console.log(obj1); // {... __proto__ : {a : 10 ...}}

如果要将传递的对象的自己的propties(可枚举)复制到另一个对象,那么您必须Object.assign(obj)作为传递第二个参数作为Object.create的属性描述符属性的替代方法

答案 1 :(得分:1)

var obj = Object.create(lassie);

通过这样做,你创建了一个新对象,它继承了lassie的属性。

如果你这样做

obj.name; //this prints "Lassie" too.

答案 2 :(得分:1)

lassie作为第一个参数传递给Object.create(),将prototype的{​​{1}}设置为obj;迭代lassie返回属性作为第二个参数

lassie

答案 3 :(得分:1)

var lassie = {
 name: 'Lassie',
 breed: 'Collie',
 speak: function () {
 return 'Woof! Woof!'; }
 };

var obj = Object.create(lassie);

现在你关注的是现在你控制obj时它给了我一个空白对象。但是当你安慰obj.speak()时,它会给你“Woof!”汪&#39!;

实际上 obj 现在具有 lassie 的所有属性,但这些属性不是 obj 自己的属性。

在这里,您将看到obj的所有属性:

for(var a in obj){
     console.log(a);
     }

在这里你会看到obj自己的财产:

for(var b in obj){
    if (obj.hasOwnProperty(b)) {    
         console.log(b);
    }
 }

这实际上是因为当我们使用var target = Object.create(obj);时 然后将所有属性作为原型属性添加到目标。