创建对象的集中常见方式

  1 . 使用 Object 或 对象字面量创建对象

  2 . 工厂模式创建对象

  3 . 构造函数模式创建对象

  4 . 原型模式创建对象  

  1 . 使用 Object 或 对象字面量创建对象

JS  中基本创建对象的方式 :

var student = new Object();
student.name = "Tom";
student.age = 18;
student.fav = function(){
alert(this.name);
}
student.fav();

使用 字面量方式创建对象 :

    var student = {
name:"91赵先生",
age:18,
fav:function(){
alert(this.name)
}
};
student.fav();

但是有个问题,当我们要创建同类的student1 , student2 .......,代码会重复.所以就有了工厂模式

  2 . 工厂模式创建对象

JS中没有类的概念,那么我们就使用一种函数将以上对象创建过程封装起来,以便于重复使用,同时给出特定出口来初始化对象.

    function createStudent(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return name;
} var student1 = createStudent("Tom",18);
var student2 = createStudent("firskt",19) console.log(student1);
console.log(student2);

但是这个也有问题就是不知道出来的数据是哪个类型的.

  比如说我们有定义了个"水果的类型" creatFruit()函数 :

function createFruit(name, color) {
var obj = new Object();
obj.name = name;
obj.color = color;
return obj;
} var v1 = createStudent("easy1", 20);
var v2 = createFruit("apple", "green");

对于以上代码创建的对象v1、v2,我们用instanceof操作符去检测,他们统统都是Object类型

        function createPerson(){
var person = new Object();
person.name = 'Tom'; person.age = 18; person.fav = function() { alert(this.name);
}
return person;
} function createFruit(){
var fruit = new Object();
fruit.name = 'Tom'; fruit.age = 18; fruit.fav = function() { alert(this.name);
}
return fruit;
}
var p1 = createPerson();
var f1 = createFruit(); console.log(p1 instanceof Object);
console.log(f1 instanceof Object); // true true 结果

  3 . 构造函数模式创建对象

        function Person(name,age) {

            this.name = name;
this.age = age;
this.fav = function() {
alert(this.name);
}
} function Fruit(name,age) { this.name = name;
this.age = age;
this.fav = function() {
alert(this.name);
}
}
var p1 = new Person('firster',17);
var f1 = new Fruit("Tom",19);
console.log(p1 instanceof Object);
console.log(f1 instanceof Object);
console.log(p1 instanceof Person);
console.log(f1 instanceof Fruit);

  4 . 原型模式创建对象

function Student() {
this.name = 'easy';
this.age = 20;
} // Student.prototype 是Student的父类
// 原型指 prototype Student.prototype.alertName = function(){
//this 指 student
alert(this.name);
}; var stu1 = new Student();
var stu2 = new Student(); stu1.alertName(); //easy
stu2.alertName(); //easy alert(stu1.alertName == stu2.alertName); //true 二者共享同一函数

最新文章

  1. linux 压缩命令详解
  2. monit 监控并自动重启服务
  3. 【MongoBD】MongoBD持久化
  4. 二、UITableView和它的亲戚们
  5. 设计模式 之 Organizing the Catalog 组织目录
  6. docker4dotnet
  7. Nginx负载均衡——基础功能
  8. 7.app和app后端的通讯
  9. BZOJ_4320_ShangHai2006 Homework_分块
  10. 供应链金融&区块链应用
  11. 5年后,我们为什么要从 Entity Framework 转到 Dapper 工具?
  12. [NLP] 酒店名归类
  13. Mysql err 1055
  14. Spring Boot 小技巧
  15. 利用Ajax和JSON实现关于查找省市名称的二级联动功能
  16. 使用PgBouncer连接池
  17. DotNetCore学习-1.读取Json配置并绑定到配置类实例
  18. Spring Boot学习笔记---Spring Boot 基础及使用idea搭建项目
  19. dig命令安装
  20. Vue核心技术 Vue+Vue-Router+Vuex+SSR实战精讲

热门文章

  1. android 布局中 layout_gravity、gravity、orientation、layout_weight
  2. MFC中 用Static控件做超链接(可以实现变手形、下划线、字体变色等功能)
  3. 慕课网python进阶函数式编程学习记录
  4. vim学习记录(转)
  5. MFC MFC对话框滚动条的使用
  6. 手把手教你画AndroidK线分时图及指标
  7. 分析cocos2d-x的lua项目中的工具方法
  8. 阿里云 RDS实例间的数据迁移
  9. PropertiesTest
  10. json和jsonp以及ajax