面向对象JS编程(一)——创建对象

1.普通模式

var person = new Object();

person.name = "Laughing";
person.age = 28;
person.job = "Software Engineer";

peron.sayName = function(){
alert(this.name);
};

person.sayName();

缺点:创建多个对象时,会产生大量的重复代码。

2.工厂模式

function createPerson(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 = new Person("Laughing", 28, "Software Enginner");
var person2 = new Person("Greg", 27, "Doctor");

缺点:无法识别对象的类型。

3.构造函数模式

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}

var person1 = new Person("Laughing", 28, "Software Enginner");
var person2 = new Person("Greg", 27, "Doctor");

优点:可以使用instanceof判断对象类型,即alert(person1 instanceof Person); //true

缺点:每个方法都需要在每个实例上重新创建一遍。

4.原型模式

function Person(){
}

Person.prototype.name = "Laughing";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
alert(this.name);
};

var person1 = new Person();
var person2 = new Person();

alert(person1.sayName == person2.sayName); //true

缺点:对于包含引用类型值的属性,共享非常不合适。如:

function Person(){
}

//更简单的原型模式
Person.prototype = {
constructor: Person, //重新指定constructor
name : "Laughing",
age : 29,
job : "Software Engineer",
friends : ["Shelby", "Court"],
sayName : function(){
alert(this.name);
}
};

var person1 = new Person();
var person2 = new Person();

person1.friends.push("Van");

alert(person1.friends); //"Shelby, Court, Van"
alert(person2.friends); //"Shelby, Court, Van" 期望是 "Shelby, Court"

5.原型构造模式

function Person(name, age, job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Shelby", "Court"];
}

Person.prototype = {
constructor : Person,
sayName : function(){
alert(this.name);
}
};

var person1 = new Person("Laughing", 28, "Software Engineer");
var person2 = new Person("Greg", 29, "Doctor");

person1.friends.push("Van");

alert(person1.friends); //"Shelby, Count, Van"
alert(person2.friends); //"Shelby, Count"






转载于:https://www.cnblogs.com/shaobo/archive/2012/01/06/2315063.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android功耗iphone,是心目中的安卓小屏旗舰吗?iPhone 8尺寸大小,4000mAh电池容量...

相信很多人都都喜欢小屏手机,但因为小屏手机总体需求不多,而且相对大屏更不好做,所以手机商都不愿意做小屏手机,这也导致市面上小屏手机非常少,苹果推出了iPhone 12 Mini,但是因为电池只有2200mAh&#xff…

mySQL 数据库错误

2019独角兽企业重金招聘Python工程师标准>>> java.sql.SQLException: The user specified as a definer (..%) does not exist 视图、存储过程的使用者若非其创建者,就会出现这样的错误 可以修改用户的权限或重新创建进行解决 转载于:https://my.oschina…

委托、事件的个人理解

事件:一个用event进行了封装的委托类型的变量,使得在进行注册的时候只能使用 或者- 需要一个触发者和一个执行者,类似于Observer模式中的Subject和Observer(当一个对象的状态发生改变时,所有依赖于他的对象都会得到通知…

android 组建水平居中,Android开发借助LinearLayout实现垂直水平居中布局

释放双眼,带上耳机,听听看~!在Android应用程序的开发中,有时需要限制水平和垂直屏幕的切换,今天这篇文章是技术狗小编为大家整理的Android应用借助LinearLayout实现垂直水平居中布局,希望对你学习这方面有所…

我不想再活在别人的世界里

我过多的关注别人的世界。 却没有去寻找属于自己的故事 总是犹豫着要不要出发 然后发现 一天就这么过去了。 转载于:https://www.cnblogs.com/zjjsxuqiang/p/3445392.html

面壁人VS智子 --- 搜索排序的作弊和反作弊

搜索引擎已经是目前网络流量最大入口,在大搜上,基本上大家打开网页做的第一件事情就是打开一个搜索引擎,然后键入你感兴趣的内容,然后开始浏览。如果是个电商的网站,你打开以后,基本上也是直接键入你感兴趣…

(转)网站推广优化教程100条(SEO,网站关键字优化,怎么优化网站,如何优化网站关键字)...

网站推广优化教程100条(完整版)下面介绍新手建站推广完美教程,各位根据自己的实际情况酌情选用: 1、准备个好域名。①.尽量在5位数内,当然也不一定,反正要让用户好记。(看个人);②.尽…

Android中attrs.xml文件的使用详解

$*********************************************************************************************$博主推荐:风萧兮兮易水寒,“天真”一去兮不复还。如何找到天真的那份快乐。小编倾力推荐app: 天真无谐下载方式:豌豆荚,应用宝…

细说JavaScript对象(1):对象的使用和属性

JavaScript 中的一切都可以视为对象,除了两个特例:null 和 undefined。 false.toString(); // false [1, 2, 3].toString(); // 1,2,3function Foo(){} Foo.bar 1; Foo.bar; // 1 一个经常容易被误解的就是数字常量不能视为对象,实际上数字常…

学习笔记:InnoDB存储结构及多版本实现

因为InnoDB是多版本化的数据库存储引擎, 它必须在表空间中保存关于旧版本数据行的信息。这个信息被存在名为rollback segment(类似于Oracle中的回滚段)的数据结构中。 在内部,InnoDB给数据库中的每一行添加三个域。一个是6字节的DB_TRX_ID域&…

access2003的使用

access2003中如何用sql语句创建表 http://zhidao.baidu.com/link?urldinVbwoI20Xz__NbcIeBPdkjeXRWmZNB0xJvdr0eMBqNflv_JcWgUoPw3ozFfqnTQ9FLkNv0XXs9loDR2Oc7Oq SQL 数据定义查询创建表: 第一张表(藏书) CREATE TABLE 藏书 (书号 Text(10)…

再见安卓 鸿蒙,安卓系统:鸿蒙系统,正式再见

原标题:安卓系统:鸿蒙系统,正式再见华为手机不能使用谷歌GMS服务已经差不多一年时间,据悉华为明年最新旗舰P40系列仍然不能使用GMS,最近爆料大神数码闲聊站称谷歌将不给华为手机授权Android R(安卓11系统),…

Android 隐式意图的配置

本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,转载请注明源地址。 《Android 显示意图激活另外一个Actitity》一文介绍了一种激活Activity的方法 本文通过清单文件(AndroidManifest.xml)来实现意图的配置 Intent-fil…

fpga中wire和reg的区别

wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会…

Django Tips

新加admin.py需重启自带Web服务器才能显示Admin保存设置外键的默认值http://stackoverflow.com/questions/937954/how-do-you-specify-a-default-for-a-django-foreignkey-model-or-adminmodel-fieldhttp://stackoverflow.com/questions/5632848/django-default-value-for-user…

wordpress html音乐,WordPress引用百度Ting音乐方法

对于个人博客来说,要在文章中添加音乐,如果放在自己服务器上,一方面是成本问题,其次,大部分博主用的国外服务器,而国外对版权看得比较重,基本上不允许上传音乐,所以我们通常都是通过…

开发工具MyEclipse如何支持可视化设计HTML和JSP页面

转自:http://tigerben.iteye.com/blog/722128 这两天一直在设计和开发JSP页面,所有标签都得通过自己手工编辑深感厌烦,印象中以前是有看到过MyEclipse是支持拖放HTML常用控件的,所以为此百度了一把,终有所获。 MyEclip…

转:c# Linq 的分页[转]

转:http://www.cnblogs.com/leleroyn/archive/2008/05/14/1196811.html 很多学习Linq的朋友肯定有自己所不同的方法,考虑这个问题我所想到的是 用Take(),Skip(),TakeWhile(),SkipUntil()中的方法来实现 首先看Take()是否可用 Take方法的作用是从结果中取…

html edge浏览器 图片,浏览器时序图及 Microsoft Edge 构架

本文又是我的作业,完成思路借鉴了 版权说明。作业要求针对一款典型浏览器,绘制浏览器处理时序图对用户界面进行操作(如拖拽窗口)带有 JavaScript 脚本 HTML 文档查阅资料,绘制 Edge 浏览器的参考架构浏览器时序图对用户界面进行操作(如拖拽窗…

您需要了解的跨阻放大器——第1部分

跨阻放大器(TIA)是光学传感器(如光电二极管)的前端放大器,用于将传感器的输出电流转换为电压。跨阻放大器的概念很简单,即运算放大器(op amp)两端的反馈电阻(RF&#xff…