简单分析javascript面向对象与原型


Posted in Javascript onMay 21, 2015

本文主要内容参考来自JavaScript高级程序设计,面向对象与原型章节:

1、工厂模式

ECMAScript 可以通过工厂模式来创建对象:

//工厂模式
function createObject(name, age) {
  var obj = new Object();                  //创建对象
  obj.name = name;                      //添加属性
  obj.age = age;
  obj.run = function () {                    //添加方法
    return this.name + this.age + '运行中...';
  };
  return obj;                            //返回对象引用
};
var obj1 = createObject('Lee', 100);          //创建第一个对象
var obj2 = createObject('Jack', 200);          //创建第二个对象
//alert(obj1.run());                          //打印第一个对象实例的run()方法
//alert(obj2.run());                          //打印第二个对象实例的run()方法

//alert(typeof obj1);
//alert(typeof obj2);
alert(obj1 instanceof Object); //true
alert(obj2 instanceof Object); //true

通过工厂模式创建的对象,解决了重复实例化问题,但对象识别问题无法解决(所有对象均是Object),因此要想解决对象识别问题,我们采用下面的构造函数。

2、构造函数

//构造函数创建
function Person(name,age){  //所有构造函数对象都是Object
  this.name=name;
  this.age=age;
  this.run=function(){
    return this.name+this.age+"ing...";
  };
};
var person1=new Person('zhu1',100);
var person2=new Person('zhu2',200);
alert(person1.run());
alert(person2.run());

alert(person1 instanceof Object); //ture
alert(typeof person2);         //Person
alert(person2 instanceof Person);  // true
var person3=new Object();
Person.call(person3,'zhu3',300);//对象冒充,person3是Object类型,冒充Person类型
alert(person3.run());

构造函数中this:代表当前作用域对象的引用,如果在全局范围this代表window对象,如果在构造函数体内,就代表当前构造函数所声明的对象。

构造函数方法,及解决了重复实例化问题,有解决了对象识别问题,对比跟工厂方法不同之处可知:

1.构造函数方法没有显示的创建对象(new Object());

2.直接将属性和方法值赋值给this;

3.没有return 语句;

4.但是使用构造函数创建必须使用new运算符;

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
Jun 10 Javascript
javascript中xml操作实现代码
Nov 21 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
jQuery选择器源码解读(三):tokenize方法
Mar 31 Javascript
浅谈Javascript线程及定时机制
Jul 02 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
jquery插入兄弟节点的操作方法
Dec 07 Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 Javascript
Bootstrap警告(Alerts)的实现方法
Mar 22 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
Express使用html模板的详细代码
Sep 18 Javascript
JavaScript Canvas实现验证码
Aug 02 Javascript
jQuery获取上传文件的名称的正则表达式
May 21 #Javascript
js兼容火狐获取图片宽和高的方法
May 21 #Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 #Javascript
javascript去除空格方法小结
May 21 #Javascript
删除javascript所创建子节点的方法
May 21 #Javascript
png在IE6 下无法透明的解决方法汇总
May 21 #Javascript
javascript相关事件的几个概念
May 21 #Javascript
You might like
php中的数组操作函数整理
2008/08/18 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
2017/03/10 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[01:04:32]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第二场 2月23日
2021/03/11 DOTA
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
详解flask入门模板引擎
2018/07/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python列表倒序输出及其效率详解
2020/03/04 Python
如何写python的配置文件
2020/06/07 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
喝酒驾驶检讨书
2014/10/01 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
涨价通知
2015/04/23 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
小学校本教研总结
2015/08/13 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
Python+Tkinter制作专属图形化界面
2022/04/01 Python