对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 相关文章推荐
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
Feb 01 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
JavaScript的事件绑定(方便不支持js的时候)
Oct 01 Javascript
jQuery之过滤元素操作小结
Nov 30 Javascript
node.js超时timeout详解
Nov 26 Javascript
js实现下拉列表选中某个值的方法(3种方法)
Dec 17 Javascript
Bootstrap每天必学之滚动监听
Mar 16 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
vue2单元测试环境搭建
May 24 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
Aug 13 Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 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连接sql server 2005环境配置及问题解决
2014/08/08 PHP
php实现Session存储到Redis
2015/11/11 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
javascript实现数独解法
2015/03/14 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
2016/09/05 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
bootstrap折叠调用collapse()后data-parent不生效的快速解决办法
2017/02/23 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Python给图像添加噪声具体操作
2019/03/03 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
golang/python实现归并排序实例代码
2020/08/30 Python
党课学习思想汇报
2014/01/02 职场文书
校长先进事迹材料
2014/02/01 职场文书
实习证明格式范文
2014/10/14 职场文书
会计岗位职责范本
2015/04/02 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
Pandas自定义选项option设置
2021/07/25 Python