/*1、工厂模式*/
function createPerson(name,age,job) {
var o = new object();
o.name = name;
o.age = age;
o.job = job;
o.setName = function(newName) {
this.name = newName;
};
return o;
}
var person1 = createPerson("zcj", 21, "Soft Engineer");
/*
问题:只能创建多个相似的对象,不能识别对象
*/

  

/*2、构造函数模式*/
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
this.setName = function(newName) {
this.name = newName;
}
}
var person1 = new Person("zcj", 21, "Soft Engineer");
/*
问题:每个方法都要在实例上重新创建一遍
*/
/*3、原型模式*/
function Person() {
} person.prototype.name = "zcj";
person.prototype.age = 21;
person.prototype.job = "Soft Engineer";
person.prototype.sayName = function() {
alert(this.name);
}; var person1 = new Person();
var person2 = new Person();
alert(person1.sayName == person2.sayName); //true person1.name = "Greg";
alert(person1.name); //"Greg"
alert(person2.name); //"zcj" delete person1.name;
alert(person1.name); //"zcj"
/*
问题:所有实例在默认情况下取得相同的属性值;对于引用类型的属性,为所有实例共享(这是不期望的)
*/

  

/*4、组合使用构造函数模式和原型模式*/
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
friends = ["Shelby","Court"]
}
Person.prototype = {
constructor:Person,
sayName: function() {
alert(this.name);
}
}
var person1 = new Person("zcj",21,"Soft Engineer");
var person2 = new Person("Gerg",27,"Doctor");
person1.friends.push("Van");
alert(person1.friends); //"Shellby,Court,Van"
alert(person2.friends); //"Shellby,Court"
alert(person1.friends === person2.friends); //false
alert(person1.sayName === person2.sayName); //true
/*
说明:使用最广泛,认同度最高的创建自定义类型的方法
*/

  

/*5、动态原型模式*/
function Person(name,age,job) {
this.name = name;
this.age = age;
this.job = job;
if(typeof this.sayName != "function") {
Person.prototype.sayName = function() {
alert(this.name);
};
}
}
var friend = new Person("zcj", 21, "Soft Engineer");
friend.sayName();
/*
说明:将所有信息封装在构造函数中,通过检查某个应该存在的方法是否有效,决定是否需要初始化
*/

  

/*6、寄生构造函数模式*/
function Person(name,age,job) {
var o = new object();
o.name = name;
o.age = age;
o.job = job;
o.setName = function(newName) {
this.name = newName;
};
return o;
}
var person1 = new Person("zcj", 21, "Soft Engineer");
person1.setName("Gerg");
alert(person1.name); //"Gerg"
/*
说明:与工厂模式区别:1、实例化对象要使用new;2、改包装函数为构造函数(函数名第一个字母大写)
*/
/*7、稳妥构造函数*/
function Person(name,age,job) {
var o = new object();
//创建私有变量和函数
var privateVariable = 10;
function privateFunction() {
return false;
} //添加特权方法
o.sayName = function() {
alert(name);
};
//返回对象
return o;
}
/*
这种模式创建的对象中,除了sayName方法外,没有其他方法访问name属性
*/

  

javascript创建对象的7种方式的更多相关文章

  1. JavaScript 创建对象的七种方式

    转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...

  2. JavaScript创建对象的几种 方式

    //JavaScript创建对象的七种方式 //https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9 ...

  3. javascript创建对象的几种方式

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用.主要为下面几种:1.对象字面量的方式 person={firstname ...

  4. [转载]javascript创建对象的几种方式

    原文链接:http://qingfeng825.iteye.com/blog/1935648 1. 工厂方法:能创建并返回特定类型对象的工厂函数(factory function). function ...

  5. JavaScript创建对象的6种方式

    JavaScript创建对象简单的说,无非就是使用内置对象(Object)或各种自定义对象,当然还可以用JSON,但写法有很多种,也能混合使用. 1.对象字面量的方式 person = {name : ...

  6. javascript创建对象的几种方式?

    javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 person={ firstname:" ...

  7. JavaScript创建对象的几种方式总结

    ECMA把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数. 1. 使用Object构造函数创建对象 创建自定义对象的最简单的方式就是创建一个Object的实例,然后再为它添加属性和方法 ...

  8. javascript 创建对象的几种方式

    1. //基于已有对象扩充其属性和方法var object = new Object(); object.name = "zhangsan"; object.sayName = f ...

  9. Javascript 创建对象的三种方式

    function createPerson(name, qq) //工厂方式 { //在工厂里创建个对象 var obj=new Object(); obj.name=name; obj.qq=qq; ...

随机推荐

  1. 拷贝出你GAC里面的DLL文件

    转:http://blog.sina.com.cn/s/blog_573be9bc0100ht65.html 早上和同事探讨如何从GAC中拷贝已经部署的DLL文件的时候,除了以前熟悉的命令行拷贝方法, ...

  2. Suse系统用户不能登录报错

    Linux系统用户创建了user用户,使用putty登陆系统,用户为user,系统登陆报 错: Could not chdir to home directory /home/user: Permis ...

  3. datatables配置及数据传输

    var merchant_url = "index.php?op=merchant"; var table_merchant_setting ={ "ajax" ...

  4. JavaScript高级程序设计24.pdf

    Element类型 Element类型用于表现XML或HTML元素,提供对元素标签名.子节点及特性的访问,它具有以下特征 nodeType的值为1: nodeName的值为元素的标签名: nodeVa ...

  5. n维立体空间建模

    n维立体空间建模,基于网格技术,将整个地球信息整体封装,初始进行网格化,选取某一个网格,进行迭代,    迭代的子项依然是网格,迭代的次数为k,网格最终大小可以指定,这种指定决定了立体块的细化率,假设 ...

  6. 忘记gitlab的root密码

    甚至也忘记了邮箱,或许是默认邮箱无法使用. 需要在服务器上面直接修改数据: gitlab-rails console production user = User.where().first user ...

  7. 基于TCP协议的客户端

    基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; im ...

  8. A*寻路算法的探寻与改良(三)

    A*寻路算法的探寻与改良(三) by:田宇轩                                        第三分:这部分内容基于树.查找算法等对A*算法的执行效率进行了改良,想了解细 ...

  9. ln命令

    图形化界面创建ln 命令行界面创建ln 命令行界面创建ln 后续,更新

  10. python Day 1 - 搭建开发环境

    搭建开发环境 首先,确认系统安装的Python版本是2.7.x: $ python --version Python 2.7.5 然后,安装开发Web App需要的第三方库: 前端模板引擎jinja2 ...