demo.html(不使用原型,直接继承):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> //当前没有的属性和方法,别人有,拿过来用 ,就是继承 var o = { // 子类对象。 } var parent = { // 要继承的对象。 name :"张三", age : 18, sayHello :function () { console.log("Hello world"); } } //混入式继承 for(var k in parent){ o[k] = parent[k]; } console.log(o); </script> </head> <body> </body> </html>
demo.html(使用原型继承的三种方式):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> //原型继承(往子类原型中添加要继承的属性和方法) //原型继承的三种方式 //一、给子类的原型对象中添加成员(通过对象的动态特性) 不是严格意义上的继承 function Person(name, age){ this.name = name; this.age = age; } Person.prototype.sayHello = function () { // 直接为子类原型添加要继承的方法。 console.log("我想死你了"); } var p = new Person("冯巩",50); p.sayHello(); //这里的p对象就继承原型 ////////////////////////////////////////////////////////////////////// //二、直接替换原型对象 function Person(name, age){ this.name = name; this.age = age; } Person.prototype.sayHi = function () { console.log("Hey man"); } var parent = { sayHello : function () { console.log("我想死你了"); } } // Person.prototype = parent; // 直接为子类原型替换成要继承的对象。 原型原有的成员会丢失。 var p = new Person("冯巩",50); p.sayHello(); // p.sayHi(); 替换之后,sayHi方法不复存在 //p对象继承了原型对象(parent对象) //注意:使用替换原型的方式实现继承的时候,原型中原有的成员就会丢失 ///////////////////////////////////////////////////////////////////////// //三、利用混入的方式(for in 遍历)给原型对象添加成员 function Person(name, age){ this.name = name; this.age = age; } Person.prototype.sayHi = function () { console.log("Hey man"); } var parent = { sayHello : function () { console.log("我想死你了"); } } for(var k in parent){ Person.prototype[k] = parent[k]; // 通过for遍历添加要继承的方法/属性 (用k赋值时,要用[],不能用点语法) } var p = new Person("冯巩",50); p.sayHello(); //也是实现了继承 p继承自原型对象 </script> </head> <body> </body> </html>