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对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...
随机推荐
- redis的有序集合ZSET(stored set)
相关命令 1.ZADD ZADD key-name score member [score member……] 将带有给定分值的成员添加到有序集合里 2.ZREM ZREM key-name mem ...
- geoserver 地图性能和缓存
1.什么是GeoWebCache GeoWebCache是地图缓存软件公司成员开发的一个基于java的开源项目.和其他的缓存系统相似,它作为一个客户端和地图服务的代理.它可以单独部署,适用于任何基于W ...
- Python中dataframe数据框中选择某一列非空的行
利用pandas自带的函数notnull可以很容易判断某一列是否为null类型,但是如果这一列中某一格为空字符串"",此时notnull函数会返回True,而一般我们选择非空行并不 ...
- win7 、2008 提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法
在安装控件过程中出现提示Error 1606 Could Not Access Network Location %SystemDrive%/inetpub/wwwroot/ 的错误解决方法 1. 点 ...
- SpringBoot自动配置xxxAutoConfiguration 的使用
https://sdqali.in/blog/2016/07/16/controlling-redis-auto-configuration-for-spring-boot-session/ 常用的类 ...
- Python中的and/or
在Python中,可以通过and,or和not进行逻辑运算,下面就来看看and和or的简单介绍. 逻辑与-and 对于包含and运算的表达式,Python解释器将从左到右扫描,返回第一个为假的表达式值 ...
- CSS属性中display="none“与visibility="hidden"的不同
display="none",元素会从页面移除,不在页面占用位置,当某个元素设置为display="none"时,这个元素后面的元素会移动上来 visibili ...
- laravel 5.3升级5.4
1)修改 composer 配置文件 composer.json 1.如果你用了 laravel-admin,larvel-admin 版本改 1.4.x-dev 2.laravel 版本改 5.4. ...
- jenkins构建的robot result结果不更新
描述:构建的结果不进行更新,仍然显示以往的构建结果 定位原因:pybot 命令中生成的结果文件保存路径与构建后robot结果显示路径不一致所致 解决办法:修改二者的结果保存路径一致
- Java实现简单的正则表达式匹配
import java.util.regex.Pattern; public class Test_REG { public static void main(String[] args) { //只 ...