Javascript-Object-Definition
/* 定义对象的方法:构造函数,函数字面量法,工厂模式,构造函数模式 */
/**************************************/
/** **/
/** 1.原生构造函数法 **/
/** **/
/**************************************/
//只能创建特定的对象,使用原生的构造函数,比如:Object,Array。
var prince = new Object();
prince.name = "Prince";
prince.age = 25;
prince.job = "Front End Engineer";
prince.sayJob = function(){
alert(prince.job);
};
var xiaobao = new Object();
xiaobao.name = "Zhibao Hu";
xiaobao.age = 25;
xiaobao.job = "SEO";
xiaobao.sayJob = function(){
alert(xiaobao.job);
};
prince.sayJob();
xiaobao.sayJob();
/**************************************/
/** **/
/** 2.字面量法 **/
/** **/
/**************************************/
//javascript对象中实行名称可以加双引号,单引号,或者不加,但是json数据一定要用双引号,不加引号或者用单引号都会出错。
var xiaoyin = {
name : "Chaohuan Yin",
age : 24,
job : "Wireless Yunyin",
sayAge : function(){
//这里如果省略了this就会出错。
alert(this.age);
}
};
xiaoyin.sayAge();
//以上两种方法的缺点:使用一个接口创建很多对象,代码重复很多。
//为了解决这个问题,人们开始使用工厂模式和他的变体
/**************************************/
/** **/
/** 3.工厂模式 **/
/** **/
/**************************************/
//用函数来封装以特定接口创建对象的细节
function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayAge = function(){
alert(this.age);
};
return o;
}
var tangtang = createPerson("Jin Shi",23,"Shop Yunyin");
tangtang.sayAge();
//工厂模式没有办法知道一个对象的类型,所以出现了构造函数模式,自己定义构造函数
/**************************************/
/** **/
/** 4.自定义构造函数法 **/
/** **/
/**************************************/
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
//当构造函数使用
var liujie = new Person("Jie Liu",27,"Yunwei");
//当普通函数使用
Person("Qinqin Yu",27,"Shop Yunyin");//添加到window中
liujie.sayName();
window.sayName();
//在另一个对象的作用域中使用
var o = new Object();
Person.call(o,"Prince",25,"F2E");
o.sayName();
//将构造函数中的方法提取出来
function Person1(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){
alert(this.name);
}
var prince = new Person1("Prince Yu",25,"Front End Engineer");
var xiaoyin = new Person1("Chaohuan Yin",24,"Shop Yunyin");
prince.sayName();
xiaoyin.sayName();
/**************************************/
/** **/
/** 5.原型模式 **/
/** **/
/**************************************/
//1.原型对象方法
function Person2(){}
Person2.prototype.name = "Prince";
Person2.prototype.age = 29;
Person2.prototype.job = "F2E";
Person2.prototype.sayAge = function(){
alert(this.age);
};
var dada = new Person2();
var prince = new Person2();
dada.sayAge();
prince.sayAge();
//2.原型对象字面量方法
function Person3(){}
Person3.prototype = {
name : "Prince",
age : 30,
job : "F2E",
sayAge : function(){
alert(this.age);
}
};
var wangzi = new Person3();
wangzi.sayAge();
/**************************************/
/** **/
/** 6.组合使用构造函数模式和原型模式 **/
/** **/
/**************************************/
function Person4(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.friends =["Wangbing","Liutan"];
}
Person4.prototype = {
constructor : Person4,
sayAge : function(){
alert(this.age);
}
}
var dada =new Person4("Prince",25,"F2E");
var xiaobao =new Person4("Zhibao Hu",25,"SEO");
dada.friends.push("Prince Yu");
alert(dada.friends);
alert(xiaobao.friends);
alert(xiaobao.friends == dada.friends);
alert(xiaobao.sayAge == dada.sayAge);
//这是用来定义引用类型的一种默认方式
Javascript-Object-Definition的更多相关文章
- Javascript Object、Function对象
1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. <script type="text/javas ...
- XML.ObjTree -- XML source code from/to JavaScript object like E4X
转载于:http://www.kawa.net/works/js/xml/objtree-try-e.html // ========================================= ...
- 【EatBook】-NO.1.EatBook.1.JavaData.1.001-《JSON 必知必会-Introduction to JavaScript Object Notation》-
1.0.0 Summary Tittle:[EatBook]-NO.1.EatBook.1.JavaData.1.001-<JSON 必知必会-Introduction to JavaScrip ...
- JSON(JavaScript Object Notation, JS 对象标记)
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...
- Javascript Object.defineProperty()
转载声明: 本文标题:Javascript Object.defineProperty() 本文链接:http://www.zuojj.com/archives/994.html,转载请注明转自Ben ...
- (The application/json Media Type for JavaScript Object Notation (JSON))RFC4627-JSON格式定义
原文 http://laichendong.com/rfc4627-zh_cn/ 摘要 JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换 ...
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式
JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - D ...
- [Javascript] Conditionally spread entries to a JavaScript object
In JavaScript, we often end up composing one object out of several other objects. Luckily there's a ...
- JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格
JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的.简洁和清晰的层次结构使得 JSON 成为理想的数据交换 ...
- JSON: JavaScript Object Notation
JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...
随机推荐
- 【Postgresql】set up
https://www.howtoforge.com/tutorial/ubuntu-postgresql-installation/ https://linux.cn/article-6770-1. ...
- android LinearLayout添加分隔线
方法一: 可以放置一个ImageView组件,然后将其设为分隔线的颜色或图形. 分隔线View的定义代码如下: [html] view plaincopy <ImageView androi ...
- [转] 关于QT的系统总结
出处:http://www.cnblogs.com/wangqiguo/p/4625611.html 阅读目录 编译环境与开发流程 QT项目的构成及原理 QT中的布局 QT中的通用控件 QVarian ...
- centos图形界面的开启和关闭
一般来说centos主要用于服务器端,所以很少开启图形化界面,但是有时候为了工作方便也会偶尔开启图形界面,下面就让简单谈谈如何开启图形化界面, 当然简化安装是没有这个程序的需要自行安装,可以yum安装 ...
- Git Step by Step – (8) Git的merge和rebase
前面一篇文章中提到了"git pull"等价于"git fetch"加上"git merge",然后还提到了pull命令支持rebase模式 ...
- 【代码审计】CLTPHP_v5.5.3后台目录遍历漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 如何使用Web Service新建和更新Wiki页面的内容
公司内部有很多部门都创建了Wiki库,来做知识共享.公司是Hosting的SharePoint环境,不能写服务器端代码,要操作Wiki只能通过Web Service来完成,所以,碰到两个情况: 1)W ...
- Hadoop集群三种作业调度算法介绍
Hadoop集群中有三种作业调度算法,分别为FIFO,公平调度算法和计算能力调度算法 先来先服务(FIFO) Hadoop中默认的调度器FIFO,它先按照作业的优先级高低,再按照到达时间的先后选择被执 ...
- vc2015编译paho.mqtt.c-1.1.0
vc2015打开“\paho.mqtt.c-1.1.0\Windows Build\Paho C MQTT APIs.sln” 将文件“\paho.mqtt.c-1.1.0\src\VersionIn ...
- N76E003之IAP
修改FLASH数据通常需要很长时间,不像RAM那样可以实时操作.而且擦除.编程或读取FLASH数据需要遵循相当复杂的时序步骤.N76E003提供方便FALSH编程方式,可以帮助用户通过IAP方式,重新 ...