javascript继承(二)—创建对象的三种模式
2014-06-10 17:30
260 查看
一、工厂模式
工厂模式可以创建多个对象,但是并不知道对象的类型,因为都指向了Object
二、构造函数模式
p1的sayHi方法和p2的sayHi方法是不同的,说明每new一个对象就会创建一个sayHi方法,其实这完全没必要,也会浪费空间。
当然代码可以改写如下:
这时它们方法所指向的代码块就相同,即共用了一个方法。但其实没有必要为了一个类的特权方法就创建一个全局的方法,也会使得这个类显得比较凌乱。
第三、原型链模式
对于原型链来创建对象,可以看到对象引用的方法是同一个方法,即类的共有方法。这样极大的节约了代码空间,不会每new一个对象就就类的所有方法创建一遍。
对于对象的特权属性、方法和共有属性、方法在javascript中类的属性研究 这篇文章中有所介绍。
function createPerson(name,age){ var o = {}; o.name = name; o.age = age; o.sayHi = function(){ alert('my name is' + this.name); }; return o; } var p1 = createPerson('小明',10); var p2 = createPerson('小红',9); p1.sayHi(); p2.sayHi(); console.log(p1.constructor); //Object console.log(p2.constructor); //Object
工厂模式可以创建多个对象,但是并不知道对象的类型,因为都指向了Object
二、构造函数模式
function Person(name,age){ this.name = name; this.age = age; this.sayHi = function(){ alert('my name is' + this.name); }; } var p1 = new Person('小明',10); var p2 = new Person('小红',9); p1.sayHi(); p2.sayHi(); console.log(p1.constructor); //Person(name,age) console.log(p2.constructor); //Person(name,age) console.log(p1.sayHi==p2.sayHi);//false
p1的sayHi方法和p2的sayHi方法是不同的,说明每new一个对象就会创建一个sayHi方法,其实这完全没必要,也会浪费空间。
当然代码可以改写如下:
function Person(name,age){ this.name = name; this.age = age; this.sayHi = sayHi; } function sayHi(){ alert('my name is' + this.name); } var p1 = new Person('小明',10); var p2 = new Person('小红',9); p1.sayHi(); p2.sayHi(); console.log(p1.constructor); //Person(name,age) console.log(p2.constructor); //Person(name,age) console.log(p1.sayHi==p2.sayHi);//true
这时它们方法所指向的代码块就相同,即共用了一个方法。但其实没有必要为了一个类的特权方法就创建一个全局的方法,也会使得这个类显得比较凌乱。
第三、原型链模式
function Person(name,age){ this.name = name; this.age = age; } Person.prototype.sayHi =function(){ alert('my name is' + this.name); } var p1 = new Person('小明',10); var p2 = new Person('小红',9); p1.sayHi(); p2.sayHi(); console.log(p1.constructor); //Person(name,age) console.log(p2.constructor); //Person(name,age) console.log(p1.sayHi==p2.sayHi);//true
对于原型链来创建对象,可以看到对象引用的方法是同一个方法,即类的共有方法。这样极大的节约了代码空间,不会每new一个对象就就类的所有方法创建一遍。
对于对象的特权属性、方法和共有属性、方法在javascript中类的属性研究 这篇文章中有所介绍。
相关文章推荐
- javascript(js)创建对象的模式与继承的几种方式
- JavaScript2种构造函数创建对象的模式以及继承的实现
- JavaScript中创建对象的三种模式
- JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习
- JavaScript2种构造函数创建对象的模式以及继承的实现
- JAVASCRIPT 对象的创建和对6种继承模式的理解和遐想
- javascript中创建对象的三种常用方法
- 在javascript中创建对象的各种模式
- javascript面向对象中的对象创建、继承、封装等实现方式
- Javascript中创建对象的各种模式
- 在没有类的情况下,JavaScript如何创建对象、实现继承?
- javascript实现创建对象的三种方法
- javascript 面向对象的对象创建与继承
- 在javascript中创建对象的各种模式
- JavaScript中怎样创建对象和继承
- JavaScript创建对象与继承
- javascript的函数、创建对象、封装、属性和方法、继承
- 深入理解JavaScript系列(47):对象创建模式(上篇)
- 深入理解JavaScript系列(48):对象创建模式(下篇)
- JavaScript的中对象创建和继承原理