日期:2014-05-16 浏览次数:20398 次
原文:Inheritance and the prototype chain
译者:youngsterxyf
对于具备基于类的编程语言(如Java或C++)经验的程序员来说,JavaScript有点混乱,因为它是一种动态语言,并且不提供class
的实现(虽然关键字class
是保留的,不可用作变量名)。
说到继承,JavaScript只有一种结构:对象。每个对象都有一个内部链接指向另一个对象,这个对象称为原型(prototype)。那个原型对象也有自己的原型,如此直到某个对象以null
作为其原型。null
,根据定义,没有原型,作为这种原型链的最后一环而存在。
JavaScript对象可看作是动态地装载属性(这里指自有属性)的”包包”,并且每个对象都有一个链指向一个原型对象。如下即为当尝试访问一个属性时发生的事情:
// 假设有个对象o,其原型链如下所示:
// {a: 1, b: 2} ---> {b: 3, c: 4} ---> null
// 'a'和'b'是o的自有属性。
// 本例中,someObject.[[Prototype]]指定someObject的原型。
// 这完全是一种标记符号(基于ECMAScript标准中所使用的),不可用于脚本中。
console.log(o.a); // 1
// o有一个自有属性'a'吗?是的,其值为1
console