原型继承
原型继承是让父对象作为子对象的原型,从而达到继承的目的:
function object(o) { function F() { } F.prototype = o; return new F(); } // 要继承的父对象 var parent = { name: "Papa" }; // 新对象 var child = object(parent); // 测试 console.log(child.name); // "Papa" // 父构造函数 function Person() { // an "own" property this.name = "Adam"; } // 给原型添加新属性 Person.prototype.getName = function () { return this.name; }; // 创建新person var papa = new Person(); // 继承 var kid = object(papa); console.log(kid.getName()); // "Adam" // 父构造函数 function Person() { // an "own" property this.name = "Adam"; } // 给原型添加新属性 Person.prototype.getName = function () { return this.name; }; // 继承 var kid = object(Person.prototype); console.log(typeof kid.getName); // "function",因为是在原型里定义的 console.log(typeof kid.name); // "undefined", 因为只继承了原型
同时,ECMAScript5也提供了类似的一个方法叫做Object.create用于继承对象:
/* 使用新版的ECMAScript 5提供的功能 */ var child = Object.create(parent); var child = Object.create(parent, { age: { value: 2} // ECMA5 descriptor }); //判断对象中的属性是否存在 console.log(child.hasOwnProperty("age")); // true