在javascript中使用Object.create(someprototype)创建的对象的构造函数

时间:2015-12-03 20:38:57

标签: javascript object-create

使用Object.create(someObj.prototype)创建的对象将它的构造函数作为someObj,那么当我尝试访问someObj的属性时,为什么它会以未定义的形式给出?

function foo(){
    this.name1 = "Name";
    this.otherName1 = "someOtherName";
}

var fooObj = new foo();
console.log(fooObj.name1); // Name

var barObj = Object.create(foo.prototype);

console.log(barObj.constructor);  
   //Outouts: 
  // function foo(){
 //    this.name1 = "Name";                                                                                                         

 //      this.otherName1 = "someOtherName" ;
//    }


//Then why not able to access this?
console.log(barObj.name1); Outputs; // undefined

2 个答案:

答案 0 :(得分:3)

这只是因为你尚未调用构造函数。

请考虑以下事项:

barObj.constructor(); // <--- this will call the constructor function and set this.name1 and this.otherName1
console.log(barObj.name1); // Outputs: "Name"

答案 1 :(得分:0)

这里barObj只是一个链接到foo原型对象的对象。Object.create在你明确调用它之前不会调用foo函数。见下面的代码。

foo.call(barObj)将调用foo函数barObj作为其上下文。 foo 函数中的 this 表示barObj

function foo(){
    this.name1 = "Name";
    this.otherName1 = "someOtherName";
}

var fooObj = new foo();
//console.log(fooObj); // Name

var barObj = Object.create(foo.prototype);
foo.call(barObj)

//Outouts: 
// function foo(){
//  this.name1 = "Name";                                                                                                         

//  this.otherName1 = "someOtherName" ;
//}


//Then why not able to access this?
console.log(barObj.name1);