javascript创建对象的7种方式
/*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种方式的更多相关文章
- JavaScript 创建对象的七种方式
转自:xxxgitone.github.io/2017/06/10/JavaScript创建对象的七种方式/ JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以 ...
- JavaScript创建对象的几种 方式
//JavaScript创建对象的七种方式 //https://xxxgitone.github.io/2017/06/10/JavaScript%E5%88%9B%E5%BB%BA%E5%AF%B9 ...
- javascript创建对象的几种方式
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用.主要为下面几种:1.对象字面量的方式 person={firstname ...
- [转载]javascript创建对象的几种方式
原文链接:http://qingfeng825.iteye.com/blog/1935648 1. 工厂方法:能创建并返回特定类型对象的工厂函数(factory function). function ...
- JavaScript创建对象的6种方式
JavaScript创建对象简单的说,无非就是使用内置对象(Object)或各种自定义对象,当然还可以用JSON,但写法有很多种,也能混合使用. 1.对象字面量的方式 person = {name : ...
- javascript创建对象的几种方式?
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON:但写法有很多种,也能混合使用. 1.对象字面量的方式 person={ firstname:" ...
- JavaScript创建对象的几种方式总结
ECMA把对象定义为:无序属性的集合,其属性可以包含基本值.对象或者函数. 1. 使用Object构造函数创建对象 创建自定义对象的最简单的方式就是创建一个Object的实例,然后再为它添加属性和方法 ...
- javascript 创建对象的几种方式
1. //基于已有对象扩充其属性和方法var object = new Object(); object.name = "zhangsan"; object.sayName = f ...
- Javascript 创建对象的三种方式
function createPerson(name, qq) //工厂方式 { //在工厂里创建个对象 var obj=new Object(); obj.name=name; obj.qq=qq; ...
随机推荐
- 最全的JAVA源码整合下载
http://www.360doc.com/content/14/0602/00/11407612_382890953.shtml http://www.360doc.com/content/14/0 ...
- android Service开机启动及debug
开机启动一个service需要做的工作如下: 1.开发一个receiver用于接收系统广播: public class BootReceiver extends BroadcastReceiver { ...
- 如何在windows系统自带命令查看硬件信息?
如何在windows系统自带命令查看硬件信息? 对于在windows下查看系统信息大家一定不陌生了,我现在说几个最常用的方法,对命令感兴趣的朋友看看,(给菜鸟看的,老手就不要笑话我了,大家都是从那个时 ...
- WordPress Comment Attachment插件跨站脚本漏洞
漏洞名称: WordPress Comment Attachment插件跨站脚本漏洞 CNNVD编号: CNNVD-201310-062 发布时间: 2013-10-09 更新时间: 2013-10- ...
- Windows SharePoint Services 默认母版页
转:http://msdn.microsoft.com/zh-cn/library/ms467402(v=office.12).aspx 最终用户可以自定义的 Windows SharePoint S ...
- Http 状态码完整说明
在网站建设的实际应用中,容易出现很多小小的失误,就像mysql当初优化不到位,影响整体网站的浏览效果一样,其实,网站的常规http状态码的表现也是一样, 一些常见的状态码为: 200 - 服务器成功返 ...
- Eclipse超级完美汉化教程
转自:http://jingyan.baidu.com/article/e75057f28401a8ebc91a899e.html 是中国人都喜欢汉化的东西,除非你想挑战英文,抑或你就是英语高手.百度 ...
- [hadoop转载]tearsort
1TB排序通常用于衡量分布式数据处理框架的数据处理能力.Terasort是Hadoop中的的一个排序作业,在2008年,Hadoop在1TB排序基准评估中赢得第一名,耗时209秒.那么Tera ...
- bzoj 4016 [FJOI2014]最短路径树问题(最短路径树+树分治)
4016: [FJOI2014]最短路径树问题 Time Limit: 5 Sec Memory Limit: 512 MBSubmit: 426 Solved: 147[Submit][Stat ...
- vijosP1006 晴天小猪历险记之Hill
vijosP1006 晴天小猪历险记之Hill 链接:https://vijos.org/p/1006 [思路] 图上DP. 这个题的递推顺序是关键.先从上一行得到最小值,然后从本行比较最小值,注意本 ...