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. php用smtp发送邮件

    php用smtp发送邮件 1.其实用smtp协议发送邮件很简单,用框架或者原生都可以,我们需要用到class.phpmailer.php 和class.smtp.php,大家可以去网上下载. 这是一个 ...

  2. JDBC使用事务实例

    package qddx.JDBC; import java.sql.*; public class useTransaction { public static void main(String[] ...

  3. html的基础标签

    完整的网页由html嵌套 head.body构成 实例: <!DOCTYPE html><html lang="en"> <head> < ...

  4. Linux中的入口函数main

    main()函数,想必大家都不陌生了,从刚开始写程序的时候,大家便开始写main(),我们都知道main是程序的入口.那main作为一个函数,又是谁调用的它,它是怎么被调用的,返回给谁,返回的又是什么 ...

  5. equals()和hashCode()隐式调用时的约定

    package com.hash; import java.util.HashMap; public class Apple { private String color; public Apple( ...

  6. JavaScript:修改作用域外变量

    今天在看JavaScript学习指南的时候做的课后习题,也因此详细的对函数的传入参数进行比较深入的研究. 题目如下: 函数如何才能修改其作用域之外的变量?编写一个函数,由1~5的数字组成的数组作为参数 ...

  7. JQuery 阻止js事件冒泡 阻止浏览器默认操作

    //阻止事件冒泡 event.stopPropagation(); //阻止浏览器默认操作 event.preventDefault(); 代码不一定能执行,写给自己看的. 事件冒泡: <a h ...

  8. Fiddler (HTTP抓包)简介

    1.什么是Fiddler? Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一.它能够记录客户端和服务器之间的所有HTTP请求,可以针对特定的HTTP请求,分析请 ...

  9. ftplib模块

    Python中的ftplib模块 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件 FTP的工作流程及基本操作可参考协议RFC95 ...

  10. B-index、bitmap-index、text-index使用场景详解

    索引的种类:B-tree索引.Bitmap索引.TEXT index1.  B-tree索引介绍: B-tree 是一种常见的数据结构,也称多路搜索树,并不是二叉树.B-tree 结构可以显著减少定位 ...