javascript 面向对象程序设计一:创建对象
2017-08-05 14:01
381 查看
创建对象的9种方法
new Object()方式创建对象
var human = new Object(); human.name='zhiquanqiao'; human.love='girl'; human.age=1000000000;
字面量形式创建对象
var person = { age:18, gender:unknow, sayName:function(){ console.log("i am a good man"); } }
工厂模式
抽象了对象的具体创建过程function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 27, "Doctor");
工厂模式解决了多个类似对象问题,却没有解决对象识别问题(怎么样知道一个对象类型)。
构造函数模式
function Person(name,age,job) { this.name= name; this.age = age; this.job= job; this.sayName=function(){ alert(this.name); } } var person1 = new Person("zhiquanqiao",93,"software enginerr"); var person2 = new Person("lihanyu",24,"Doctor"); Person("Greg",27,"Doctor"); window.sayName(); var o = new Object(); Person.call(o,"Kristen","Nurse"); o.sayName();
构造函数模式创建对象的主要问题,就是每个方法都要重新创建一遍。
原型模式
每创建一个函数都有一个prototype(属性),这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。function Person() { } Person.prototype.name = "zhiquanqiao"; Person.prototype.age=27; Person.prototype.job="Software Engineer"; Person.prototype.sayName = function(){ alert(this.name); } var person1 = new Person(); person1.sayName(); var person2 = new Person(); person2.sayName(); alert(person1.sayName == person2.sayName);
原型模式存在的问题:
1.原型模式创建对象的时候省略了为构造函数传递初始化参数这一个环节,所有的实例都拥有相同的属性值。
2.原型最大的问题就在于其共享的特性。
组合使用构造函数模式和原型模式
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.friends = ["arm", "job"]; } Person.prototype = { constructor: Person, sayName: function () { alert(this.name); } } var person1 = new Person("Qzqanlhy", 23, "Soft Engineer"); var person2 = new Person("Grep", 27, "Doctor"); person1.friends.push("world"); alert(person1.friends); alert(person2.friends); alert(person1.friends === person2.friends); alert(person1.sayName === person2.sayName);
动态原型模式
function Person(name,age,job){ this.name = name; this.age = age; this.job = job; //function if(typeof this.sayName != "function"){ Person.prototype.sayName = function(){ alert(this.name); } } //end function } var friend = new Person("Nicholas",29,"Soft engineer"); friend.sayName();
寄生构造函数模式
基本思想是创建一个函数,该函数的作用是封装创建对象的代码,然后返回新创建的对象。function Person(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o; } var friend = new Person("Nicholas", 29, "Software Engineer"); friend.sayName(); //"Nicholas"
稳妥构造函数模式
function Person(name, age, job){ var o = new Object(); o.sayName = function(){ alert(name); }; return o; } var friend = Person("Nicholas", 29, "Software Engineer"); friend.sayName();
相关文章推荐
- 读Javascript高级程序设计第三版第六章面向对象设计--创建对象
- JavaScript面向对象程序设计创建对象的方法分析
- javascript高级程序设计第六章:面向对象的程序设计——创建对象读书笔记
- javascript笔记3-面向对象的程序设计-创建对象
- javascript笔记3-面向对象的程序设计-创建对象
- javascript复习笔记五----面向对象程序设计(创建对象)
- 【JavaScript学习】面向对象的程序设计(5):组合继承(伪经典继承)
- 【JavaScript学习】面向对象的程序设计(7):寄生式继承和寄生组合式继承
- JavaScript 面向对象程序设计 变量,函数定义之不可不知
- javascript面向对象程序设计——封装(by vczero)
- 【javascript高级程序设计】读书摘录3 第六章、面向对象
- JavaScript面向对象程序设计(4): 函数
- JS高程3:面向对象的程序设计——创建对象
- JavaScript 面向对象程序设计(上)——封装(转)
- javascript学习十:面向对象之对象的创建
- JS面向对象程序设计之创建对象模式
- JavaScript面向对象程序设计三 原型模式(上)
- JavaScript面向对象实例——创建日志调试对象来代替alert函数进行调试
- javascript 面向对象的程序设计
- 【JavaScript高级程序设计】对象的创建与继承