通过Object.create()方法创建一个新对象,使新对象的__proto__原型指向通过create传入的对象
let foo = { age:10 }; let f = Object.create(foo); console.log(f.age);//10因此新创建出来的对象调用的属性和方法都会去传入对象上去找
Object.create的第一个参数是一个对象,这个对象将作为通过create创建的新对象 的原型对象,即f2.proto == foo2,第二个参数是可选参数,如果没有指定undefined。
为什么f0.age值为undefined呢?
我个人理解是,Object.create接收的第一个参数是一个对象,所以当我传入通过new或字面量对象时都可以打印出值,但虽然函数也是对象,但是和通过new出来的对象还是有区别的,我的理解是当把函数当作对象使用时,如果想获取函数内的某个属性值时,是必须通过return进行返回的,无法直接访问,所以这里虽然f0.__proto__的原型指向了函数foo1,但是也无法直接访问foo1中的age(f0.age),当在函数对象中查找不到age值时,会往上级原型链上查找,函数的__proto__指向的是Function.prototype,所以f0.height的值为20
如:
var f = function foo() { this.age = 10; }; console.log(f.age); //undefined