使用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
答案 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);