/* 定义对象的方法:构造函数,函数字面量法,工厂模式,构造函数模式 */

     /**************************************/
/** **/
/** 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的更多相关文章

  1. Javascript Object、Function对象

    1.Object对象 原型对象 原型是对象的一个属性,也就是prototype属性,每个对象都有这个内部属性,而且他本身也是一个对象. <script type="text/javas ...

  2. XML.ObjTree -- XML source code from/to JavaScript object like E4X

    转载于:http://www.kawa.net/works/js/xml/objtree-try-e.html // ========================================= ...

  3. 【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 ...

  4. JSON(JavaScript Object Notation, JS 对象标记)

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言 ...

  5. Javascript Object.defineProperty()

    转载声明: 本文标题:Javascript Object.defineProperty() 本文链接:http://www.zuojj.com/archives/994.html,转载请注明转自Ben ...

  6. (The application/json Media Type for JavaScript Object Notation (JSON))RFC4627-JSON格式定义

    原文  http://laichendong.com/rfc4627-zh_cn/ 摘要 JavaScript Object Notation (JSON)是一个轻量级的,基于文本的,跨语言的数据交换 ...

  7. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

    JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 它基于JavaScript(Standard ECMA-262 3rd Edition - D ...

  8. [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 ...

  9. JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格

    JSON,全称:JavaScript Object Notation,作为一个常见的轻量级的数据交换格式,应该在一个程序员的开发生涯中是常接触的.简洁和清晰的层次结构使得 JSON 成为理想的数据交换 ...

  10. JSON: JavaScript Object Notation

    JSON是JavaScript Object Notation 的缩写,是JS提供的一种数据交换格式.1) JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言 ...

随机推荐

  1. Android学习笔记——保存文件(Saving Files)

              本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论.                 欢迎转载,转载请注明网址:http://www.cnblogs.com/J ...

  2. python unittest 1

    今天开始研究python的unittest模块,为我们当前做的项目定制测试方案,包括unittest和自动化流程测试. python的unittest的基本使用方法如下:   1.import uni ...

  3. mysql出现1030 Got error 28 from storage engine解决方法

    今天自己用 tp 写的项目报错 查了下,是磁盘临时空间不够导致 查看 my.cnf 的 tmpdir,看下指向哪个目录,修改到有空间的目录 最后发现是/var/tmp/phd/log/daemons. ...

  4. javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点

    主要是javascript中消除字符串空格,比较两种方式的不同 //面向对象,消除字符串两边空格 String.prototype.trim = function() { return this.re ...

  5. [RN] 03 - Resource Collection & AWS Auth

    那些资源 一.三个例子 iReading Bilibili-React-Native ZhiHuDaily-React-Native 二.IM 例子 1. React Native Socket.io ...

  6. RedHat6.5-Linux安装telnet服务

    1 下载以下三个包 telnet-0.17-47.el6.x86_64.rpm(telnet客户端) telnet-server-0.17-47.el6.x86_64.rpm(telnet服务端) x ...

  7. ios的单元測试OCUnit以及更新了之后的XCTestCase

    1.像一般创建项目的步骤一样.创建一个用于測试的项目或者打开一个待測试的项目. (oc是5.0之前所使用的測试,如今用的是XCtestCase,默认会创建一个主的測试类.曾经版本号可能非常多步骤省去) ...

  8. 如何在windows上测试iphone?

    本教程将会让你没有mac照样测试iphone,这是我折腾了几天总结下来的,希望对大家有用. 先来几张效果图吧 方法很简单,但是配置起来说实话有点麻烦,先在电脑上安装vmware,在安装osx系统,在安 ...

  9. SpringBoot thymeleaf模板版本,thymeleaf模板更换版本

    SpringBoot thymeleaf模板版本 thymeleaf模板更换版本 修改thymeleaf模板版本 ================================ ©Copyright ...

  10. 【Python】TF环境

    1.pip show pip 2.python -m pip install --upgrade pip 3.conda list 4.pip install tensorflow 5.pip ins ...