js对象的定义方法

转载:http://blog.sina.com.cn/s/blog_60f632050100wz7h.html


(1)基于已有对象的扩充方法:适用于临时构建对象,弊端:每次构建对象都要新建一个。

 var object=new Object();object.name="Tom";object.sayname=function(name){this.name=name;alert(this.name);}object.sayname("James");


(2)工厂方法 :可以重复返回多个对象。

    function createObject(){var object=new Object();object.username="Tom";object.password="123";object.get=function(){alert(this.username+","+this.password);}return object;}var o1=createObject();var o2=createObject();o2.username="james";o1.get();o2.get();


工厂方法的改进:

因为js的函数定义是指向一个应用的对象,所以每次构建一个object对象,都会构建一个get方法的对象,现在将get方法分离,那么就是多个object对象共用一个get对象,这样就可以节省内存空间。改进如下:
  function get(){alert(this.username+","+this.password);
}function createObject(username,password){var object=new Object();object.username=username;object.password=password;object.get=get;return object;}var o1=createObject();var o2=createObject();o1.get();o2.get();


(3)构造方法创建对象:
<span style="white-space:pre">	</span>function getInfo(){<span style="white-space:pre">		</span>alert(this.username+","+this.password);<span style="white-space:pre">	</span>}function Person(username,password){//在执行第一行代码前,js引擎会生产一个对象。即浏览器this.username=username;this.password=password;this.getInfo=getInfo;//此处隐含了一个return object的语句。}//只有在使用new Person();才会有上述Person中注释出现的情况,如果不适用new语句是不会          //成功的。var person=new Person("Tom","abc");person.getInfo();var person2=new Person("Jame","123");person2.getInfo();

(4)原型方法:(prototype)
因为js的所有类都是继承Object,Object中有prototype属性,因此自定义的对象也有prototype属性:如下
    function Person(){}Person.prototype.username="Tom";Person.prototype.password="1325";Person.prototype.getInfor=function(){alert(this.username+" , "+this.password);}var person=new Person();var person2=new Person();person.username="James";person.getInfor();person2.getInfor();

这种方法的缺点就是不能传递参数,只能在创建后修改属性。另外使用这种方法定义的对象都贡献同样的属性,因为他们都共用了object对象中的prototype对象,所以所有的对象贡献原型中的属性,其中一个更改了属性,也会反映到其他对象中去。

为了解决原型方法中对象贡献属性,可以采用构造方法+原型的方法去构建对象。把属性用构造方法定好。具体方法就用原型设置。
如下:
    <script type="text/javascript">function  Person(password){this.username=new Array();this.password=password;}Person.prototype.getInfo=function(){alert(this.username+","+this.password);}var p1=new Person("abc");p1.username.push("Tom");p1.getInfo();</script>

(5)动态原型的方法:
    function Person(username,password){this.username=username;this.password=password;if( typeof Person.first=="undefined" ){//通过设置标志量让getInfo只生成一次对象。alert("invoke");Person.prototype.getInfo=function(){alert(this.username+" , " +this.password);}Person.first=true;}}var p1=new Person("Tom","123");   var p2=new Person("James","abc");p1.getInfo();p2.getInfo();


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

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

相关文章

8051 管脚定义_8051微控制器的引脚说明

8051 管脚定义8051微控制器的引脚说明 (Pin Description of 8051 Microcontroller) Pins from 1-8 1-8针 Port 1: The pins in this port are bi-directional and can be used for input and output. The pins are individually controlled; some are used for input while ot…

android 事件分发

2019独角兽企业重金招聘Python工程师标准>>> 文章来源于CSDN http://blog.csdn.net/lanhuzi9999/article/details/26515421 转载于:https://my.oschina.net/lhjtianji/blog/398998

对象复制的7种方法,还是Spring的最好用!

日常编程中&#xff0c;我们会经常会碰到对象属性复制的场景&#xff0c;就比如下面这样一个常见的三层 MVC 架构。当我们在上面的架构下编程时&#xff0c;我们通常需要经历对象转化&#xff0c;将业务请求流程经历三层机构后需要把 DTO 转为DO然后在数据库中保存。当需要从数…

js visibility和display区别(附代码实例)

<html><head><meta charset"utf-8" /><title></title><script type"text/javascript">//元素的隐藏与显示//visibility属性是隐藏元素但保持元素的浮动位置&#xff0c;而display实际上是设置元素的浮动特征。//PS&am…

Java中的Switch都支持String了,为什么不支持long?

来源 | jitwxs.cn/6f3eddff.html我们知道 Java Switch 支持byte、short、int 类型&#xff0c;在 JDK 1.5 时&#xff0c;支持了枚举类型&#xff0c;在 JDK 1.7 时&#xff0c;又支持了 String类型。那么它为什么就不能支持 long 类型呢&#xff0c;明明它跟 byte、short、int…

什么是WebSocket,以及如何在Python中使用它?

什么是WebSocket&#xff1f; (What is WebSocket?) WebSocket is a communications protocol which provides a full-duplex communication channel over a single TCP connection. WebSocket protocol is standardized by the IETF as RFC 6455. WebSocket是一种通信协议&am…

QCon讲师对对碰——洪小军采访梁宇鹏:就是爱Golang

编者按&#xff1a;QCon北京2015将于4月23日~25日在北京国际会议中心召开。在大会开始之前&#xff0c;InfoQ推出了讲师对对碰栏目&#xff0c;邀请一些技术专家相互采访&#xff0c;碰撞出思维的火花。在QCon上&#xff0c;美图架构平台部门负责人洪小军将分享《美拍后端技术演…

网页之错误代码大全

winray整理~~~ 400 无法解析此请求。 401.1 未经授权&#xff1a;访问由于凭据无效被拒绝。 401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝。 401.3 未经授权&#xff1a;访问由于 ACL 对所请求资源的设置被拒绝。 401.4 未经授权&#xff1a;W…

我们如何在Python中创建多行注释?

When we need to comment on multiple lines/statements, there are two ways to do this, either comment each line or create multiline comments (or block comment). 当我们需要对多个行/语句进行注释时&#xff0c;有两种方法可以执行此操作&#xff0c;或者注释每行或创…

final的8个小细节,听说只有高手才知道!你知道几个?

final关键字是一个常用的关键字&#xff0c;可以修饰变量、方法、类&#xff0c;用来表示它修饰的类、方法和变量不可改变&#xff0c;下面就聊一下使用 final 关键字的一些小细节。细节一、final 修饰类成员变量和实例成员变量的赋值时机对于类变量&#xff1a;声明变量的时候…

java实现的简单程序登录界面

2019独角兽企业重金招聘Python工程师标准>>> 这是我写的简单代码&#xff1a; 简单&#xff0c;没什么嚼头&#xff0c;作业贴&#xff0c;直接上代码。文件保存用户名和密码&#xff0c;输入密码错误3次退出程序。 [java] view plaincopy 01.public Login() throws…

js对浏览器内部及外部窗口宽度及高度使用测试

<!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><p id"demo"></p><script>//Part I 取浏览器内部窗口宽度及高度//该例显示浏览器窗口的高度和宽度&#xff1a;&#xff08;不包…

golang rsa密钥_如何在Golang的地图中检查密钥是否存在?

golang rsa密钥When you try to get the value of key in a map, you get two return values. The first value is the value of key and second is bool value which could be either true or false. If a key is present in the map then the second value will be true else…

try-catch-finally中的4个巨坑,老程序员也搞不定!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 语言中 try-catch-finally 看似简单&#xff0c;一副人畜无害的样子&#xff0c;但想要真正的“掌控”它&#xff0…

CentOS7安装Python3.4 ,让Python2和3共存

为什么80%的码农都做不了架构师&#xff1f;>>> #CentOS7安装Python3.4 &#xff0c;让Python2和3共存 环境&#xff1a;CentOS7.1 需求&#xff1a;网络畅通 编译需要的一些包&#xff0c;酌情安装 yum groupinstall "Development tools" yum install z…

字节二面:优化 HTTPS 的手段,你知道几个?

由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议&#xff0c;给应用数据套了个「保护伞」&#xff0c;提高安全性的同时也带来了性能消耗。因为 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程&#xff0c;目的是为了通过非对称加密握手协商或者交换出对称加密密钥&…

js使用location的方法实验

location.hostname 返回 web 主机的域名 127.0.0.1 location.port 返回 web 主机的端口 &#xff08;80 或 443&#xff09; 8020 location.protocol 返回所使用的 web 协议&#xff08;http:// 或 https://&#xff09; http: location.pathname 返回当前页面的路径和文件名…

求首位相连一维数组最大子数组的和

结对成员&#xff1a; 朱少辉&#xff1a;主要负责代码编写 侯涛亮&#xff1a;主要负责程序测试 题目:一个首尾相接的一维整型数组&#xff0c;其中有正有负&#xff0c;求它的最大子数组并返回它的位置。 思路&#xff1a;在求一维子数组的基础上&#xff0c;先输入一个含有N…

SpringBoot接口幂等性实现的4种方案!

作者 | 超级小豆丁来源 | www.mydlq.club/article/94目录什么是幂等性什么是接口幂等性为什么需要实现幂等性引入幂等性后对系统的影响Restful API 接口的幂等性如何实现幂等性方案一&#xff1a;数据库唯一主键方案二&#xff1a;数据库乐观锁方案三&#xff1a;防重 Token 令…

scala 数组合并_Scala程序合并两个数组或数组缓冲区

scala 数组合并Scala | 合并两个数组 (Scala | Merging two arrays) Arrays are important data structures in programming and there may arise times when we have two different arrays and we need to merge them into one for processing. This is the case when you nee…