简单分析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实现的可以编辑选择的下拉框的代码
Nov 19 Javascript
js 限制数字 js限制输入实现代码
Dec 04 Javascript
jquery高级编程的最佳实践详解
Mar 23 Javascript
JavaScript性能优化之小知识总结
Nov 20 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
Angularjs的启动过程分析
Jul 18 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 Javascript
JavaScript实现栈结构详细过程
Dec 06 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中MD5函数使用实例代码
2008/06/07 PHP
php 学习资料零碎东西
2010/12/04 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
使用正则替换变量
2007/05/05 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
经典海量jQuery插件 大家可以收藏一下
2010/02/07 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
Bootstrap插件全集
2016/07/18 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
python基础教程之实现石头剪刀布游戏示例
2014/02/11 Python
python+Django+apache的配置方法详解
2016/06/01 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
python八大排序算法速度实例对比
2017/12/06 Python
pyqt5自定义信号实例解析
2018/01/31 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
python logging 日志的级别调整方式
2020/02/21 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
通信生自我鉴定
2014/01/18 职场文书
学生宿舍管理制度
2014/01/30 职场文书
一分钟演讲稿
2014/04/30 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
运动会加油稿
2015/07/22 职场文书
python运算符之与用户交互
2022/04/13 Python