js是一种动态语言,即js的对象创建好之后可以随意修改,因此JS对象的面向对象编程部分更可以说是通过JS的怪异特性来模拟Java这类的面向对象编程的。下面首先讨论几种创建对象的方式:

1. 工厂模式创建
       工厂模式,顾名思义就是通过一个函数来创建对象,因为对象的的成员是可以随便修改的,所以在工厂中创建一个Object对象,然后逐次添加自己需要的属性或方法,然后返回这个对象即可,示例如下:
function createStudentInstance(name, age)
{
var stu = new Object();
stu.name = name;
stu.age = age;
stu.goShool = function(){
alert("go to school");
}
}
使用时通过:var student = createStudentInstance("aa", 20),这样的语句即可。
2. 通过构造函数创建对象
        在js中函数中默认包含一个this指针,但该指针的指向却因调用上下文而不同,当将方法当做普通方法调用时,this指向当前window对象,即当前作用域是全局作用域。而使用new运算符调用的话,当前作用域则为new创建的对象,即this指向当前对象。根据这js的特性就可以模拟构造函数的方式来创建对象。示例如下:
function Student(name, age)
{
this.name = name;
tihs.age = age;
this.goSchool = function() { alert("go to school"); }
}
使用时通过:var stu = new Student("aa", 20),这样的语句即可。
3. 通过原型模式创建对象
        首先介绍原型模式,在面向对象编程中同一类继承链的对象都是有共性的,而某些共有的属性的值也是要求一样的,因此创建对象是可以定义一个原型,而需要的时候直接拷贝这个原型即可。
        在JS中函数都是Function类型的实例,也是一种对象类型,而函数对象中含有prototype属性,而该属性是用做实现原型模式的,即通过给prototype赋予属性和方法,这样当创建一个对象后,对象调用属性或方法时,js会逆着原型链来查找对应的属性和方法,因此如果在对象中定义了一个和原型中同名的属性或方法时就会屏蔽原型中的属性和方法。所以原型中的属性和方法也就类似于Java中的类方法和类属性,只是js中的实例属性/方法会屏蔽原型中的属性/方法。示例代码如下:
function student(){
} student.prototype.goschool = function() { alert("go to school"); };var stu1 = new student();
student.prototype.name = "aa";
student.prototype.age = 20;
var stu2 = new student();
stu1.name = "bb";
alert(stu1.name); //bb
alert(stu2.name); //aa
4. 组合构造函数和原型
通过构造函数创建对象会给每个对象都定义同样的成员方法,即每个对象都有一套成员方法,这样就会造成对象间方法的不匹配;而但是用原型创建,则会导致所有对象公用同样的成员变量。所以好的方式是综合使用构造函数和原型,在构造函数中定义成员变量,在原型中定义方法。示例代码如下:
function Student(name, age)
{
this.name = name;
tihs.age = age;
}
student.prototype.goschool = function() { alert("go to school"); };
 

Javascirpt中创建对象的几种方式的更多相关文章

  1. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  2. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  3. 【转】Java中创建对象的5种方式

    Java中创建对象的5种方式   作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有 ...

  4. JavaScript中创建对象的三种方式!

    JavaScript中创建对象的三种方式! 第一种 利用对象字面量! // 创建对象的三种方式! // 1 对象字面量. var obj = { // 对象的属性和方法! name: 'lvhang' ...

  5. Java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  6. js中创建对象的几种方式

    创建对象指创建一个object并给这个对象添加属性和方法,有以下几个方式: 最基本的: var Person={}; Person.name='tom'; Person.age='20'; Perso ...

  7. Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别

    转载:http://www.kuqin.com/shuoit/20160719/352659.html 用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: ...

  8. Java技术——Java中创建对象的5种方式

    此文为译文 原文连接:https://dzone.com/articles/5-different-ways-to-create-objects-in-java-with-ex 0. 前言 作为Jav ...

  9. Java 中创建对象的 5 种方式!

    Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 Employee类: class Employee implements Cloneable, Serializable { pri ...

随机推荐

  1. 百度地图helloworld程序问题

    按照百度开发者平台[http://developer.baidu.com/map/index.php?title=androidsdk/guide/retrieval]的开发指南,完整编写代码ok之后 ...

  2. ODOO的命令行调用以及config默认值

    通过odoo-bin 可以启动odoo server ,启动的过程中需要提供一些args,包括数据库设置,ip设置等 如果不想每次输入这些参数,可以直接修改odoo/tools/config.py中的 ...

  3. AFNetworking3.0 Https P12证书

    最近服务器由原来的ice中间件改为https.方便了和服务器交互时不用自己aes加密了. -之前服务器人员和我(IOS)都没有使用过https,所以https跑不通很难说是服务器没有配置好还是IOS这 ...

  4. 【我是老中医】Win10系统下MATLAB无法正常打开的解决方案

    转眼大四了,要开始做毕设了,导师给的题目要用到他之前做的东西,都是MATLAB做的,所以不太熟悉MATLAB的我也得用这玩意儿了,想想自己目前也就大二的DSS实验和大三的AI实验用过MATLAB,当时 ...

  5. openacs与easycwmp的对接

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...

  6. 039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件

    用户控件ascx代码: <%@ Control Language="C#" AutoEventWireup="true" CodeFile="K ...

  7. Tcp方式采集CNC兄弟设备数据

    先说下为了采集CNC兄弟设备的数据可谓是一波三折. 因为首次接触brother设备(CNC)是直接在设备上设置IP.用户名.密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据 ...

  8. python print 进度条的例子

    def progress(width, percent): print "%s %d%%\r" % (('%%-%ds' % width) % (width * percent / ...

  9. CSS 伪类 (Pseudo-classes)

    CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪类 (Pseudo-classes)实例: 超链接 本例演示如何向文档中的超链接添加不同的颜色. 超链接 2 本例演示如何向超链接添加其他样式. ...

  10. [Linux] - Docker 常用命令

    # 运行docker # -it表示前端运行 docker run -it centos /bin/echo haha # 后端运行并映射80端口 docker run -dt -p : --name ...