你不知道的 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(); } }