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; ...
随机推荐
- 自定义滚轮效果选择器spinnerwheel的使用总结
项目中有使用到像IOS滚轮效果的选择时间或数字的组件:android-spinnerwheel github地址:https://github.com/ai212983/android-spinner ...
- Tabhost嵌套以及Tab中多个Activity跳转的实现
做了一个demo,先看看效果图: 源码 如下: () DoubleTabHost package yy.android.tab; import android.app.TabActivity; imp ...
- php 返回json 解析 报Wide character in print
php 返回json: zabbix:/var/www/html/DEVOPS/Home/Lib/Action# vim EquipmentAction.class.php <?php head ...
- “net.tcp://localhost:9000/ObtainData”处带有协定“"IObtainData"”的 ChannelDispatcher 无法打开其 IchannelListener。
http://stackoverflow.com/questions/1252791/how-to-solve-the-channeldispatcher-is-unable-to-open-its- ...
- C# winform 导出导入Excel/Doc 完整实例教程[网上看到的]
还真没做过winform的导出导入,今天上网百度了一下.结果--- 所以还是我自己写个吧.之前做过web的,半搬半做就OK. 1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上 ...
- WordPress Complete Gallery Manager插件‘upload-images.php’任意文件上传漏洞
漏洞名称: WordPress Complete Gallery Manager插件‘upload-images.php’任意文件上传漏洞 CNNVD编号: CNNVD-201309-377 发布时间 ...
- C# web 网页刷新时数据集的保存和应用
Web 数据访问策略建议 设计 Web 应用程序中的数据访问时,您要做出多种选择,例如与数据源通信的方式.是否在页的往返过程之间存储数据.以及如果确实要存储数据应存储在何处等.您所做的选择可以确定应用 ...
- Never use GetDate() when comparing date timesoffsets, use SYSDATETIMEOFFSET()
-- my current uk time is 2014-01-09 10:43:00 +0 ) = '2014-01-09 18:43:00 +08:00'; ) = '2014-01-09 02 ...
- window7电脑设置好了,却无法远程?
设置远程连接: 步骤:右键[我的电脑]-->[属性] 点击[远程设置],然后设置如下: 在 cmd 中 通过 [ipconfig]命令查看IP: 以上设置好了,发现仍无法远程?解决办法如下: 电 ...
- 一个好看的Input样式
<div class="search"> <input type="text"></div> .search{ text-a ...