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

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, __proto__, constructor

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  2. js 中的 prototype 和 constructor

    var a=function(){ this.msg="aa"; } a.prototype.say=function(){ alert('this is say');} 1.只有 ...

  3. 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  4. JS中的prototype、__proto__与constructor属性

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  5. JS中的prototype、__proto__与constructor

    1.前言 作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关 ...

  6. JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  7. js - __proto__ 、 prototype和constructor

    零.资料与前言 0x1 材料: 1.帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 0x2 前言 之前也尝试总结过 js 中的 __proto__ . pr ...

  8. 论js中的prototype

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

  9. JS中对于prototype的理解

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

随机推荐

  1. java作业6

    super用法: 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.println(" ...

  2. dedecms织梦

    dedecms的安装,其修改连接数据库文件是:common.inc.php

  3. [转】:HTTP请求流程(一)----流程简介

    http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html HTTP请求流程(一)----流程简介 最近一直在研究如何让asp.net实 ...

  4. 正则表达式 regular expression

    原博客地址:http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

  5. smartmontools的安装使用和实现对磁盘的Nagios监控

    安装 首先从sourceforge下载最新的安装版本. 解压编译 $ tar -zxvf smartmontools-6.4.tar.gz $ cd smartmontools-6.4 $ ./con ...

  6. 启动hadoop

    1.启动前先将主节点下hadoop-2.2.0/hdfs/下,清空,然后新建name文件夹 2.将从节点下hadoop-2.2.0/hdfs/下,清空,然后新建data文件夹 3.hadoop-2.2 ...

  7. ZPPR101-批量更改BOM组件

    ************************************************************************ Title : ZPPR101 ** Applicat ...

  8. Codeforces Round #308 (Div. 2) A B C 水 数学

    A. Vanya and Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. Java:多个数求和

    设计思想: 先定义int n,定义输入数的个数,输入一个新建的动态数组,输入数字存入动态数组中,函数转换并求和,最后输出. 程序流程图: 源程序代码: package com; import java ...

  10. leetcode之反转链表

    原文链接:点击打开链接 Reverse a singly linked list A linked list can be reversed either iteratively or recursi ...