function creatPerson(name, age) { var obj = new Object(); obj.name = name; obj.age = age; obj.sayName = function() { window.alert(this.name); }; return obj; }
function Person(name, age) { this.name = name; this.age = age; this.sayName = function() { window.alert(this.name); }; }
function Person() { } Person.prototype = { constructor : Person, name : "Ning", age : "23", sayName : function() { window.alert(this.name); } };
你们能够看到这种方法有缺陷,类里属性的值都是在原型里给定的。javascript
function Person(name, age) { this.name = name; this.age = age; } Person.prototype = { constructor : Person, sayName : function() { window.alert(this.name); } };
将构造函数方法和原型方法结合使用是目前最经常使用的定义类的方法。这种方法的好处是实现了属性定义和方法定义的分离。好比我能够建立两个对象person1
和person2
,它们分别传入各自的name
值和age
值,但sayName()
方法能够同时使用原型里定义的。java
function SuperType(name) { this.name = name; this.sayName = function() { window.alert(this.name); }; } function SubType(name, age) { SuperType.call(this, name); //在这里借用了父类的构造函数 this.age = age; }
function SuperType(name) { this.name = name; this.sayName = function() { window.alert(this.name); }; } function SubType(name, age) { this.supertype = SuperType; //在这里使用了对象冒充 this.supertype(name); this.age = age; }
function SuperType(name) { this.name = name; } SuperType.prototype = { sayName : function() { window.alert(this.name); } }; function SubType(name, age) { SuperType.call(this, name); //在这里继承属性 this.age = age; } SubType.prototype = new SuperType(); //这里继承方法
组合继承的方法是对应着咱们用‘组合使用构造函数和原型方法’定义父类的一种继承方法。一样的,咱们的属性和方法是分开继承的。编程
以上就是常见的JavaScript中面向对象编程的几种实现,欢迎你们补充与指正。函数