本文正确性有待商榷,高手路过请不吝指教

1.js中只有对象,包括对象,函数,常量等。

对象不用解释。函数也有属性,常见之一就是prototype。常量也有属性:

(3).__proto__;//Number {}

2.函数的prototype

函数是一种特殊的对象,它可以直接通过小括号来执行自身代码。

函数还有一个特殊的属性prototype,它也是一个对象。

prototype对象也有一个特殊的属性constructor,初始的时候它是指向该函数的。

也就是当js解释到function关键字的时候,会创建两个对象,一个是function本身,一个是prototype对象。同时将该函数对象的prototype属性指向prototype,而prototype对象的constructor属性指向该函数对象。

3.对象的__proto__属性

每个对象都有一个__proto__属性(低版本的IE中可能没有直接给出吧),该属性十分特殊,因为在调用对象的方法或者访问对象的属性时,js会依次遍历对象本身,该对象的__proto__,该对象的__proto__的__proto__……

也就是原型链继承的关键

4.new关键字

new 关键字用于通过一个函数创建一个对象。

其实它主要完成三个工作

  1. 创建一个对象
  2. 将该对象的__proto__指向函数的prototype
  3. 调用该函数(此时注意函数的作用域是第一步新建的对象)

最后返回该对象即可。可以以下面的代码代替

function New(f,args){var a= {};a.__proto__ = f.prototype;f.apply(a,args);return a;}

5.js对象关系图

其中:xFunction是自定义的函数,xPrototype是xFunction的原型,xObject=new xFunction()

Object 是JS内置的Object;_prototype_是Object的原型

Empty是所有函数对象的__proto__,是一个特殊的函数,没有prototype,

希望大家可以共同探讨,给予指点

js中的prototype和constructor的更多相关文章

  1. 论js中的prototype

    今天在阅读代码时,碰到了prototype //判断是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) == ...

  2. JS中对于prototype的理解

    JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  3. js中String.prototype.format類似于.net中的string.formitz效果

    String.prototype.format = function(args) { if (arguments.length>0) { var result = this; if (argum ...

  4. javascript中的prototype和constructor

    构造函数 我们知道,ECMAScript5中的Object.Array.Date.RegExp.Function等引用类型都是基于构造函数的,他们本身就是ECMAScript5原生的构造函数.比如,我 ...

  5. JS中的prototype

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  6. JS中的prototype(原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html)

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  7. JS中的prototype///////////////////////////z

    JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...

  8. js中关于prototype学习(2015年1月5号晚)

    prototype在js中为原型,只要是对象都有原型,最高原型为Object. 函数作为一特殊的对象,下面探讨prototype(原型)和function(函数)之间的关系. function A ( ...

  9. (转载)JS中的prototype

    原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的 ...

随机推荐

  1. AngularJS 细节

    AngularJS 表达式({{ expression }})类似于 AngularJS ng-bind 例子: <span>表达式</span> <div ng-app ...

  2. 5天揭秘js高级技术-第二天

    一.数组 1. 什么是数组? 数组就是一组数据的集合: 其表现形式就是内存中的一段连续的内存地址: 数组名称其实就是连续内存地址的首地址: 2. 关于js中的数组定义 数组定义无需指定数据类型: 数组 ...

  3. 使用CocoaPods过程中 Unable to find a specification for

    文章转自:http://blog.csdn.net/zhangao0086/article/details/39703083 当把CocoaPods生成的workspace移动到上层目录时,需要改下P ...

  4. js中的prototype和__proto__

    var Person = function(name){ this.name = name; this.say = function(){ return "I am " + thi ...

  5. MySQL Cluster搭建与测试

    MySQL Cluster是一个基于NDB Cluster存储引擎的完整的分布式数据库系统.不仅仅具有高可用性,而且可以自动切分数据,冗余数据等高级功能.和Oracle Real Cluster Ap ...

  6. ios cell时间相同隐藏算法

  7. 【Python】使用Supervisor来管理Python的进程

    来源 : http://blog.csdn.net/xiaoguaihai/article/details/44750073     1.问题描述 需要一个python的服务程序在后台一直运行,不能让 ...

  8. ios UIView autoresizingSubview 属性

    自动尺寸调整行为 当您改变视图的边框矩形时,其内嵌子视图的位置和尺寸往往也需要改变,以适应原始视图的新尺寸.如果视图的autoresizesSubviews属性声明被设置为YES,则其子视图会根据au ...

  9. (原创)mybatis学习一,夯实基础

    一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...

  10. HTTP04--CDN知识

    一.CDN用途及概念 目的: CDN是内容分布网路(Content Delivery Network)的简称,目的是将网站内容发布到最接近用户的边缘,使用户就近获取内容,提高相应速度. 使用机制: 目 ...