对Js OOP编程 创建对象的一些全面理解


Posted in Javascript onJuly 26, 2016

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

对象的含义

对象可以是汽车,人,动物,文字,表单或者任何存在的事物等等。

对象有:

属性-------对象的某些特定的性质。

方法-------对象能做的事情。

事件-------能响应发生在对象上的事情。

我们可以通过创建一个人的对象来理解面向对象

人:

两只手,两只脚,一个头,还可以跑动。

手,脚,头,是人的属性,跑动是人的方法。

首先,我们来用最简单的方法创建一个对象

var person = {
      head: "one",
      hand: "two",
      foot: "two",
      run : function(){
        console.log("running");
      }
    }

这个方法一点都不实用,因为它是创建一个单独的对象,,而这个对象和任何常见的数据结构没有任何联系。

然后,我们用构造函数的方式创建一个对象

var Person = function(){//注意,首字母大写
      this.head = "one",
      this.hand = "two",
      this.foot = "two",
      this.run = function(){
        alert("running");
      }
    }
    var Joan = new Person();
    document.write(Joan.run())// "running"

这是用构造函数创建的对象,然后我们再加上一行代码看看

var Niki = new Person();
    alert(Joan==Niki) //false;

是的,现在创建了是两个不同的对象实例。

在JavaScript中的每个函数都有一个prototype的属性.如果某个函数被用作构造函数,则这个属性会被自动通过new调用创建对象的原型

console.log(Joan)

可以看到有一个__proto__:Person,其中__proto__是Joan的原型链.它是指向Person的原型.

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。

关于原型链的一些理解,在JavaScript高级程序设计 一书中写的非常详细。有兴趣的可以去看看,网上也有pdf的文档可以找到。不过建议还是买本书,支持原版嘛。

然后对prototype这个原型属性的任何更改能够应用于用new Person()构造的每一个实例对象,不管它是在更改之前还是更改后创建.为Person.prototype 添加新函数.具体如下:

var Person = function(){//注意,首字母大写
      this.head = "one",
      this.hand = "two",
      this.foot = "two"
    }
    Person.prototype.run = function(){
      alert("running");
    }
    var Joan = new Person();
    Joan.run()// "running"
    alert(Joan.__proto__===Person.prototype)//'true'

可以看到,在原型中创建方法是可以调用的,同时Joan的原型链是指向Person的原型的。

再看:

var Niki = new Person();//"runing"
     Person.prototype.run = function(){
       alert("running running")
     }
     Joan.run()//"running running"
     Niki.run()//"running running"

看,修改Person的原型方法,所有被new Person()创建的对象实例中的方法都被修改了,因为所有实例中共用的是同一个原型方法run。这就是原型的一种应用。

这就是关于创建对象的一些理解。

写了好久。也不知道有没有错误。 如果有错误,欢迎各位大大指点。

下次再写面向对象继承方面的东西。

以上就是小编为大家带来的对Js OOP编程 创建对象的一些全面理解全部内容了,希望大家多多支持三水点靠木~

Javascript 相关文章推荐
JavaScript中的History历史对象
Jan 16 Javascript
jquery 页面全选框实践代码
Apr 02 Javascript
基于jQuery的history历史记录插件
Dec 11 Javascript
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
Mar 05 Javascript
关于js内存泄露的一个好例子
Dec 09 Javascript
javascript内置对象arguments详解
Mar 16 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
ajax与json 获取数据并在前台使用简单实例
Jan 19 Javascript
jQuery仿京东商城楼梯式导航定位菜单
Jul 25 #Javascript
又一枚精彩的弹幕效果jQuery实现
Jul 25 #Javascript
EasyUI加载完Html内容样式渲染完成后显示
Jul 25 #Javascript
前端微信支付js代码
Jul 25 #Javascript
javascript与jquery动态创建html元素示例
Jul 25 #Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 #Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 #Javascript
You might like
简单PHP上传图片、删除图片实现代码
2010/05/12 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
2009/08/03 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
canvas的神奇用法
2017/02/03 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
使用tensorflow实现线性回归
2018/09/08 Python
python-django中的APPEND_SLASH实现方法
2019/06/21 Python
python调用私有属性的方法总结
2020/07/24 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
售后专员岗位职责
2013/12/08 职场文书
个人自我评价和职业目标
2014/01/24 职场文书
晚会邀请函范文
2014/01/24 职场文书
物理力学求职信
2014/02/18 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
解除财产保全担保书
2014/05/20 职场文书
老公出轨后的保证书
2015/05/08 职场文书
开学第一天的感想
2015/08/10 职场文书
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android