JavaScript面向对象之对象创建
来源:互联网 发布:上海哪里有美工培训 编辑:程序博客网 时间:2024/06/04 19:21
1.创建对象:
var person = new Object();person.name = "zhangsan";person.age = 30;person.job = "software engineer";person.sayName = function(){alert(this.name);}person.sayName();
缺点:创造不同的对象需要大量重复的代码。
2.工厂模式:
function createObject(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 = createObject("zhangsan",20,"teacher");var person2 = createObject("lisi",30,"doctor");person1.sayName();person2.sayName();
缺点:无法判断对象的类型。alert(typeof person1);alert(person1instanceof Object);
3.构造函数模式:
(1)
function Person(name,age,job){this.name = name;this.age = age;this.job = job;this.sayName = function (){alert(this.name);};}var person1 = new Person("zhangsan",20,"teacher");var person2 = new Person("lisi",30,"doctor");person1.sayName();person2.sayName();alert(person1.sayName == person2.sayName);
缺点:sayName方法执行同样的任务,但创建不同的对象时却要不同的Function。
(2)function Person(name,age,job){this.name = name;this.age = age;this.job = job;this.sayName = sayName;}function sayName(){alert(this.name);}var person1 = new Person("zhangsan",20,"teacher");var person2 = new Person("lisi",30,"doctor");person1.sayName();person2.sayName();alert(person1.sayName == person2.sayName);
缺点:(2)虽然解决了(1)的问题,但sayName是一个全局函数,却只能被某个对象使用。如果对象由很多方法,就要定义很多全局函数,破坏了函数的封装性。
4.原型模式:
(1)
function Person(){}Person.prototype.name = "zhangsan";Person.prototype.age = 30;Person.prototype.job = "teacher";Person.prototype.sayName = function(){alert(this.name);};var person1 = new Person();person1.sayName();var person2 = new Person();person2.sayName();alert(person1.sayName == person2.sayName);(2)
function Person(){}Person.prototype = {name:"zhangsan",age:30,job:"teacher",friends:["lisi","wangwu"],sayName:function(){alert(this.name);}};var person1 = new Person();var person2 = new Person();person1.friends.push("zhaoliu");alert(person1.friends);alert(person2.friends);alert(person1.friends == person2.friends);
缺点:由(2)可以看出原型的缺点,由于共享的特性,在使用基本类型时可以使用隐藏的手段解决,引用类型会造成共享问题。
5.组合构造函数模式和原型模式function Person(name,age,job){this.name = name;this.age = age;this.job = job;this.friends = ["wangwu","zhaoliu"];}Person.prototype = {constructor:Person,sayName: function(){alert(this.name);}};var person1 = new Person("zhangsan",20,"teacher");var person2 = new Person("lisi",30,"doctor");person1.friends.push("liuqi");alert(person1.friends);alert(person2.friends);alert(person1.friends == person2.friends);alert(person1.sayName == person2.sayName);6.动态原型模式
function Person(name,age,job){this.name = name;this.age = age;this.job = job;this.friends = ["wangwu","zhaoliu"];if(typeof this.sayName != "function"){Person.prototype.sayName = function (){alert(this.name);};}}var person1 = new Person("zhangsan",20,"teacher");var person2 = new Person("lisi",30,"doctor");person1.friends.push("liuqi");alert(person1.friends);alert(person2.friends);alert(person1.friends == person2.friends);alert(person1.sayName == person2.sayName);7.寄生构造函数模式:
function Person(name,age,job){var o = new Object();o.name = name;o.age = age;o.job = job;o.friends = ["wangwu","zhaoliu"];o.sayName = function (){alert(this.name);};return o;}var person1 = new Person("zhangsan",20,"teacher");var person2 = new Person("lisi",30,"doctor");person1.friends.push("liuqi");alert(person1.friends);alert(person2.friends);alert(person1.friends == person2.friends);alert(person1.sayName == person2.sayName);8.稳妥构造函数模式:
function Person(name,age,job){var o = new Object();o.sayName = function (){alert(name);};return o;}var person = Person("zhangsan",20,"teacher");person.sayName();特点:与寄生构造函数模式相似,不同点在于一是不使用new调用构造函数,二是在创建对象的实例方法中不使用this.
0 0
- javascript面向对象编程之创建对象
- JavaScript面向对象编程之创建对象
- JavaScript面向对象之对象创建
- JavaScript [面向对象] 对象创建
- Javascript面向对象之:一.创建类
- javascript之面向对象之创建对象的方法
- Javascript之面向对象编程(创建对象)
- javascript学习十:面向对象之对象的创建
- 《JavaScript》——面向对象之对象的创建
- JavaScript基于面向对象之创建对象(一)
- 《JavaScript》——面向对象之对象的创建
- JavaScript学习笔记6 面向对象之创建对象
- javascript 之面向对象
- JavaScript之面向对象
- javascript之面向对象
- Javascript之面向对象
- JavaScript之面向对象
- JavaScript高级程序设计【面向对象-创建对象】
- 微信中如何长按图片保存的是另一张图片
- Android Context简明记录
- 性能优化,进无止境---内存篇(下)
- 接口测试之基础篇
- python3 openpyxl(1)
- JavaScript面向对象之对象创建
- FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(me
- SharedPreference在工程中的使用
- android 基本控件篇二
- LeetCode : Convert Sorted Array to Binary Search Tree
- mongoDB常用命令
- Java中try,catch,finally的用法
- 软件版本GA,RC,alpha,beta,Build 含义
- Arcgis Server 基于GP 服务的最短路径分析配置