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. EXTJS4.2中neptune主题的使用

    原文地址:http://blog.csdn.net/xieguojun2013/article/details/8880519 最近在在sencha.com官网了解到EXTJS的最新版本里增加了新的主 ...

  2. final评价Ⅱ

    1.飞天小女警: 礼物挑选这个项目相比之前的发布功能更完善了些,但是整体界面还是不太美观,用户界面上呈现出的选项字不够清晰,使用起来不是很方便,但是增加了猜你喜欢的功能,可以根据用户的浏览记录猜测用户 ...

  3. canvas 动态画线

    <!--实现鼠标按下的时候,移动进行绘制,鼠标抬起结束绘图,用到的事件有mousedown mousemove mouseup用的的canvas api 有 beginPath moveTo l ...

  4. js中遍历对象的属性和值

    今天想看一下js的数组遍历的内容,搜索到了一个关于对象遍历写好的函数,保留一下.以后好用. function allPrpos ( obj ) {   // 用来保存所有的属性名称和值   var p ...

  5. [THINKING IN JAVA]初始化和清理

    4.5初始化和清理 5.1 构造器初始化 无参:如果一个类没有构造器,那么会有一个默认的无参构造器,并且只能通过无参构造器初始化对象: 带参:传入参数初始化成员变量或者其它初始化操作需要的参数,如果类 ...

  6. C#压缩图片——高质量压缩方式

    传入Bitmap对象,以及新图片的长宽(Bitmap.Size),这样生成的就是跟原图尺寸一致的低质量图片 public Bitmap GetImageThumb(Bitmap mg, Size ne ...

  7. 1.15 kickstart rpm yum

    ###########bootstrap 启动加载器 (pxelinux.0)传输pxelinux.cfg NIC #network interface PXEpxelinux.0/tftp/pxel ...

  8. Python之路,day5-Python基础

    for#列表生成式 data = [1,2,3,4,5,6,7] #####列表生成式 #data = [i+1 for i in data] data = [i*2 if i>5 else i ...

  9. 控制器(Controller) – ASP.NET MVC 4 系列

           创建一个 ASP.NET MVC 4 Web Application 项目,将程序命名为 MvcMusicStore,如下图: 控制器        MVC 模式中,控制器主要负责响应用 ...

  10. Arcgis 图层编辑器“粘贴”功能菜单灰色不能使用的问题与解决办法

    本人由win7系统更换为win10系统,平常使用的arcgis10.2升级使用10.3版本,相应的VS2012也升级使用2013版本,但是在安装了之后发现"Editor"编辑工具中 ...