js中的prototype和constructor
本文正确性有待商榷,高手路过请不吝指教
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 关键字用于通过一个函数创建一个对象。
其实它主要完成三个工作
- 创建一个对象
- 将该对象的__proto__指向函数的prototype
- 调用该函数(此时注意函数的作用域是第一步新建的对象)
最后返回该对象即可。可以以下面的代码代替
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的更多相关文章
- 实践一些js中的prototype, __proto__, constructor
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- js 中的 prototype 和 constructor
var a=function(){ this.msg="aa"; } a.prototype.say=function(){ alert('this is say');} 1.只有 ...
- 帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- JS中的prototype、__proto__与constructor属性
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- JS中的prototype、__proto__与constructor
1.前言 作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关 ...
- JS中的prototype、__proto__与constructor(图解)
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...
- js - __proto__ 、 prototype和constructor
零.资料与前言 0x1 材料: 1.帮你彻底搞懂JS中的prototype.__proto__与constructor(图解) 0x2 前言 之前也尝试总结过 js 中的 __proto__ . pr ...
- 论js中的prototype
今天在阅读代码时,碰到了prototype //判断是否是数组function isArray(obj) { return Object.prototype.toString.call(obj) == ...
- JS中对于prototype的理解
JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个 ...
随机推荐
- Windows系统定时重开或者关机
at 6:00 /every:M,T,W,Th,F,S,Su cmd /c shutdown -r -t 60 (每天早上6点自动重启一次) at 0:00 /every:M,T,W,Th,F,S,S ...
- js动态设置窗体位置
1设置登录框的js,动态设置高度等 <script> $(document).ready(function () { $() / + "px"); $("in ...
- HDU 4666
http://acm.hdu.edu.cn/showproblem.php?pid=4666 求m维最远曼哈顿距离 借鉴别人的思路http://www.cnblogs.com/jackge/archi ...
- session 原理 数据结构
[原创]转载请保留出处:shoru.cnblogs.com 晋哥哥的私房钱 引言 在web开发中,session是个非常重要的概念.在许多动态网站的开发者看来,session就是一个变量,而且其表现像 ...
- hive数据导入方法
可以通过多种方式将数据导入hive表 1.通过外部表导入 用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表. ...
- Apache、tomcat、Nginx常用配置合集
配置文件地址: Apache: /etc/httpd/conf/httpd.conf tomcat: /usr/local/tomcat/conf/server.xml Nginx : /usr/l ...
- UVa 10810 - Ultra-QuickSort
题目大意:给出一个数列,每次交换相邻数字,求排成递增序的最少交换次数. 分析:求逆序数,合并排序 #include<cstdio>#include<cstring>#inclu ...
- Conference Search不错的学术会议日程提示网站
一个不错的学术会议日程提示网站 http://www.confsearch.org,还可以通过内嵌框架(embedded iframe)集成到自己的网页上. http://www.confsearch ...
- psp0
周活动总结表 姓名:苗堃 ...
- 数据库实验一 SQL Service的安装
SQL 2014 安装需要 Microsoft .Net Framework 3.5框架 win 8.1 Microsoft .Net Framework 3.5框架安装教程:点我 安装图文教程:点我 ...