JavaScript面向对象的理解  笔记链接: http://pan.baidu.com/s/1c0hivuS

1:JavaScript 中分两种对象,函数对象和普通对象
new Function() 创建的对象都是函数对象、其他的都是普通对象。
函数对象 例:

function f1(){};
var f2 = function(){};
var f3 = new Function('str','console.log(str)');

普通对象 例:

var o3 = new f1();
var o1 = {};
var o2 =new Object();

2:原型对象

JavaScript中,定义一个普通对象或者函数对象时候,对象中都会包含一些预定义的属性。其中
函数对象有个prototype属性、它就是原型对象。
普通对象没有prototype、但有__proto__属性、(当然函数对象也有这个属性)参考下文的图解
原型对象就是一个普通对象 、是Object的一个实例
特殊的:

Function的prototype --> Function.prototype
Object的prototype --> Object.prototype

Function.prototype 很特殊,
  1:他不是一个普通对象,而是函数对象
  2:因为函数对象是有一个prototype属性的,而这个对象没有
Object.prototype 是一个普通对象

3:原型链
JavaScript中,在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性 用于指向创建自己的函数对象的原型对象(prototype)如下
__proto__ 指向创建自己的函数对象的原型对象prototype

特殊的
Function.__proto__ == Function.prototype
Object.__proto__ == Function.prototype
Function.prototype.__proto__ == Object.prototype
Object.prototype.__proto__ == null

理解:
自定义的函数对象.__proto__ == Function.prototype
自定义的函数对象.prototype.__proto__ == Object.prototype

自定义的函数对象 是由 new Function 创建,
那么自定义的函数对象.__proto_ 应该指向 Function.prototype 对象

自定义的函数对象.prototype 是一个原型对象 、就是一个Object的一个实例
那么自定义的函数对象.prototype.__proto__ 应该指向 Object.prototype
例:
console.log(kongxh.__proto__ === person.prototype) //true
同样,person.prototype对象也有__proto__属性,它指向创建它的函数对象(Object)的prototype
console.log(person.prototype.__proto__ === Object.prototype) //true
继续,Object.prototype对象也有__proto__属性,但它比较特殊,为null
console.log(Object.prototype.__proto__) //null
我们把这个有__proto__串起来的直到Object.prototype.__proto__为null的链叫做原型链。
如图:

4:constructor

原型对象prototype中都有个预定义的constructor属性,用来引用它的函数对象。这是一种循环引用
比如:
自定义的函数对象.prototype.constructor === 自定义的函数对象 //true
Function.prototype.constructor === Function //true
Object.prototype.constructor === Object //true
有两点需要注意:
  (1)如何查找一个对象的constructor,就是在该对象的原型链上寻找碰到的第一个constructor属性所指向的对象 【原型链的形成是真正是靠__proto__ 而非prototype)】
  (2)注意Object.constructor===Function;
ps:
  原型对象是用来做共享 、用于继承
  原型和原型链是JS实现继承的一种模型。
  原型链的形成是真正是靠__proto__ 而非prototype
  instanceof 可以查看对象是那种类型,类型包括当前对象的类型及其原型对象的类型
比如
instanceof(kongxh) == Person //true
instanceof(kongxh) == Object //true

下图为一个自定义对象创建的对象之间引用图:

var Person = function(){};
var kongxh = new Person();

JavaScript面向对象的理解的更多相关文章

  1. javascript javascript面向对象的理解及简单的示例

    javascript面向对象的理解及简单的示例 零.本节重点: 1.封装: 2.继承: 壹.下面理解: 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的 ...

  2. javascript面向对象的理解(一)

    第一次在园子发文: 关于js面向对象的理解: 工厂方式是什么?构造函数是什么?原形链?对象的引用? 1.对象是什么? 在js接触的比较多的就是对象了,比如: var arr = []; arr.num ...

  3. javascript面向对象个人理解

    1. javascript面向对象特性:抽象性,封装性,继承性: 2. js中的对象:键值对的集合:比如说{key:value} 3.抽象性:用一个对象描述一个数据,需要抽取这个对象的核心数据:两个必 ...

  4. JavaScript 面向对象编程 · 理解对象

    前言:      在我们深入 面向对象编程之前 ,让我们先理解一下Javascript的 对象(Object),我们可以把ECMAScript对象想象成散列表,其值无非就是一组名值对,其中值可以是数据 ...

  5. JavaScript面向对象深入理解原型

    原型模式 function Person(){ } Person.prototype.name="Ewarm"; Person.prototype.age="29&quo ...

  6. JavaScript 面向对象开发知识基础总结

    JavaScript 面向对象开发知识基础总结 最近看了两本书,书中有些内容对自己还是很新的,有些内容是之前自己理解不够深的,所以拿出来总结一下,这两本书的名字如下: JavaScript 面向对象精 ...

  7. 聚焦JavaScript面向对象的思想

    面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物.随着时代的发展,计算机被用于解决越来越复杂的问题.一切事物皆对象,通过面向对象的方式,将现实世界的 ...

  8. 03.JavaScript 面向对象精要--理解对象

    JavaScript 面向对象精要--理解对象 尽管JavaScript里有大量内建引用类型,很可能你还是会频繁的创建自己的对象.JavaScript中的对象是动态的. 一.定义属性 当一个属性第1次 ...

  9. 深入理解Javascript面向对象编程

    深入理解Javascript面向对象编程 阅读目录 一:理解构造函数原型(prototype)机制 二:理解原型域链的概念 三:理解原型继承机制 四:理解使用类继承(继承的更好的方案) 五:建议使用封 ...

随机推荐

  1. django出现__init__() got an unexpected keyword argument 'mimetype‘ 问题解决

    这种问题好多新手按照djangobook学习的时候应该都遇到过,是因为这是老的django的写法,新的django已经升级改变了很多东西. 处理方法如下: I think you are not us ...

  2. Python全栈开发第13天

    #多用户登录 import getpass #引用getpass import os #引用os import configparser #引用配置文件操作的库 count = 0 count_oth ...

  3. 任务调度之持久化(基于Quartz.net)

    上一篇我们了解了任务调度及他的远端管理方式,传送门:任务调度及远端管理(基于Quartz.net) 这篇我们要完成任务调度的持久化功能,即新增修改删除之类的功能,这必须得要有的,不然都不知道后台都有什 ...

  4. react+webpack开发环境配置

    react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...

  5. Spring + qyartz+多任务实现任务调度功能。

    前记:如果配置多个任务不能触发的请仔细检查配置文件!!!!!! 不存在多个同时间任务不能触发的现象!!!! 这个东西记得不要设置成false.如果写了就是true.不写的话默认true. 下面开始贴配 ...

  6. 共通css初次尝试

    1.网页的主要的html <@fn.html css=["${basePath}/css/help/guideCommon.css${versionControl}"]tit ...

  7. 记录一次坑爹的VM连接主机的路程

    因为之前电脑配置过虚拟机连接主机的过程,所以没有太在意,换电脑了之后配了两天结果没有配置成功; 首先配置静态ip: 1,编辑第一个文件/etc/sysconfig/network-scripts/if ...

  8. Python之路-Linux命令基础(4)

    作业一: 1)开启Linux系统前添加一块大小为15G的SCSI硬盘 2)开启系统,右击桌面,打开终端 3)为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大 ...

  9. JavaEE开发之Spring中的多线程编程以及任务定时器详解

    上篇博客我们详细的聊了Spring中的事件的发送和监听,也就是常说的广播或者通知一类的东西,详情请移步于<JavaEE开发之Spring中的事件发送与监听以及使用@Profile进行环境切换&g ...

  10. hive 锁表问题

    报错如下: Unable to acquire IMPLICIT, EXCLUSIVE lock dms@pc_user_msg@month=201611 after 100 attempts. 显示 ...