你不知道的 JavaScript 系列上( 55) - Object.create()

[[Prototype]] 机制就是存在于对象中的一个内部连接,它会引用其他对象。这个链接的作用:如果在对象上没有找到需要的属性和方法,引擎就会继续在 [[Prototype]] 关联的对象上进行查找。同理,如果在后者中也没有找到需要的引用就会继续查找它的 [[Prototype]],以此类推。这一系列对象的链接被称为 “原型链”
 
var foo = {
  something: function() {
    console.log('Tell me something good...');
  }
}

var bar = Object.create(foo);
bar.something(); // Tell me something good...

Object.create() 会创建一个新对象 bar 并把它关联到我们指定的对象 foo ,这样我们就可以充分发挥 [[Prototype]] 机制的威力并且避免不必要的麻烦(比如使用 new 的构造函数调用会生成 .prototype 和 .constructor)

 

我们并不需要类来创建两个对象之间的关系,只需要通过委托来关联对象就足够了。而 Object.create(...) 不包含任何类的诡计,所以它可以完美的创建我们想要的关联关系。

 

Object.create(...) 是 ES5 中新增的函数,所以在 ES5 之前的环境中,如果要支持这个功能的话就需要使用一段简单的 polyfill 代码,它部分实现了 Object.create(...) 功能
if(!Object.create){
  Object.create = function(o) {
    function F(){}
    F.prototype = o;
    return new F();
  }
}

 

posted @ 2020-04-19 10:39  wzndkj  阅读(159)  评论(0编辑  收藏  举报