对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中匿名、命名函数的性能测试
Sep 04 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
Sep 23 Javascript
不间断循环滚动效果的实例代码(必看篇)
Oct 08 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
JavaScript变量作用域_动力节点Java学院整理
Jun 27 Javascript
通过js控制时间,一秒一秒自己动的实例
Oct 25 Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
发布Angular应用至生产环境的方法
Dec 10 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
May 05 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
Aug 07 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
JavaScript实现简单动态表格
Dec 02 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
js实现网页随机验证码
2020/10/19 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
详解Python中的各种函数的使用
2015/05/24 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python引用计数操作示例
2018/08/23 Python
python实现换位加密算法的示例
2018/10/14 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
服装设计专业自荐书范文
2013/12/30 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
就业意向书范本
2015/05/11 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python