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,我想要创建一个 ...
随机推荐
- App Store审核指南:WatchKit、HealthKit、ApplePay以及HomeKit部分
将此前App Store审核指南中的WatchKit.HealthKit.ApplePay以及HomeKit部分进行了整理和摘取. 10. 用户界面 10.1 应用程序必须遵守苹果的<Apple ...
- Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三)
Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三) 在附录文章4,5的基础上改造MainActivity.java和MyJob.ja ...
- 如何从oc中去获取一个私有的变量.....
运行时 的用法 1.定义的一个类,里面有一个私有变量mt_,并且在初始化值为"HaHa Ha ".@interface Mobj : NSObject {@privateNSStr ...
- WPF Step By Step -基础知识介绍
回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...
- Oracle 12C RAC的optimizer_adaptive_features造成数据插入超时
问题分析 使用10046事件追踪方式,直接生成上传时的数据库事件日志进行分析,发现主要区别在于以下两条sql语句在每次长时间上传时都有出现,并且执行用户不是上传用户,而是数据库SYS用户. ***** ...
- CentOS 6.2 OpenVPN 搭建
一.yum 安装. 二.下载 easy-rsa 3.0 三.生成根证书.服务器.客户端证书.ta 生成流程: wget -c https://github.com/OpenVPN/easy-rsa/a ...
- HDU 4358 莫队算法+dfs序+离散化
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others)T ...
- tyvj 1057 dp 变形背包
P1057 金明的预算方案 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第二道 描述 金明今天很开心,家里购置的新房就要领钥匙了 ...
- php部分---对数据的多条件查询,批量删除
1.给多条件查询,添加条件 <h1>新闻信息查看</h1> <?php $tiaojian1=" 1=1"; $tiaojian2=" 1= ...
- 奇怪的电梯(HDU1548) (Dijkstra)或者(BFS)
问题 E: 奇怪的电梯 时间限制: 1 Sec 内存限制: 64 MB提交: 35 解决: 16[提交][状态][讨论版] 题目描述 有一天桐桐做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都 ...