JavaScript prototype背后的工作原理
首先从一个函数说起
function fn1(name, age) {
this.name = name;
this.age = age;
this.say = function() {
alert('my name:' + this.name + 'and age:'+ this.age);
}
}
fn1.prototype.test = function() {
alert('test');
}
var f1 = new fn1('jm',20);
f1.say(); //弹出 my name jm and age 20
f1.test(); //弹出test
这里发生什么事情?
一些其本的东西 我们要知道 每个函数(function)都有一个保留属性 prototype 它返回的是一个对象
这个对象可以写也可以读
每个函数new 出来的对象有一个隐式属性 (__proto_ = fn1.prototype)指向构造函数的原型的!
下面一个图说明prototype动行原理,(图中有参考网上一些资料):

JavaScript prototype背后的工作原理的更多相关文章
- javascript prototype原型链的原理
javascript prototype原型链的原理 说到prototype,就不得不先说下new的过程. 我们先看看这样一段代码: <script type="text/javasc ...
- JavaScript中this的工作原理以及注意事项
在JavaScript中,this 的概念比较复杂.除了在面向对象编程中,this 还是随处可用的.这篇文章介绍了this 的工作原理,它会造成什么样的问题以及this 的相关例子. 要根据this ...
- JavaScript的计时器的工作原理
最近都在看一些JavaScript原理层面的文章,恰巧看到了jQuery的作者的一篇关于JavaScript计时器原理的解析,于是诚惶诚恐地决定把原文翻译成中文,一来是为了和大家分享,二来是为了加深自 ...
- javaScript中闭包的工作原理
一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话 ...
- 详解javascript中this的工作原理
在 JavaScript 中 this 常常指向方法调用的对象,但有些时候并不是这样的,本文将详细解读在不同的情况下 this 的指向. 一.指向 window: 在全局中使用 this,它将会指向全 ...
- JavaScript之this的工作原理
JavaScript 有一套完全不同于其它语言的对 this 的处理机制. 在五种不同的情况下 ,this 指向的各不相同. 1.全局范围内 当在全部范围内使用 this,它将会指向全局对象. 2.函 ...
- 《浏览器工作原理与实践》<08>调用栈:为什么JavaScript代码会出现栈溢出?
在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript 引擎先会对其进行编译,并创建执行上下文.但是并没有明确说明到底什么样的代码才算符合规范. 那么接下来我们就来明确下,哪些情况下代码才 ...
- JavaScript原型继承工作原理
原型继承的定义 当你阅读关于JS原型继承的解释时,你时常会看到以下这段文字: 当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止.——出自JavaScript秘 ...
- How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...
随机推荐
- IOS 视频流
https://github.com/kolyvan/kxmovie demo 项目
- Android app 全局异常统一处理
异常处理需求 Android app 出现 crash 时,会出现 "程序异常退出" 的提示并关闭,体验不好,另外主要是无法知道哪里出现的崩溃,需要知道哪里造成的异常,就需要一个全 ...
- tmux用于恢复远程屏幕
1.我主要用tmux在远程登陆后,恢复以前会话时候用. 2.tmux创建新会话: tmux new -s 会话名 3.返回控制台: Ctrl+b d ,Ctrl+b命令是tmux前置命令,每次都要先输 ...
- android 的build.gradle 的API手册
问题:对于用gradle的来配置java的开发者都能在GRADLE_HOME/docs/dsl找到如何对其build.gradle文件的具体属性. 但是对于开发android的开发者就不能对于官方的& ...
- MSSQL分组取后每一组的最新一条记录
数据库中二张表,用户表和奖金记录表,奖金记录表中一个用户有多条信息,有一个生效时间,现在要查询: 奖金生效时间在三天前,每个用户取最新一条奖金记录,且用户末锁定 以前用的方法是直接写在C#代码中的: ...
- html5自定义数字键盘
原理:使用div模拟输入框,避免手机原生键盘弹出,键盘使用div模拟,点击事件使用js控制,光标闪烁使用css模拟,具体代码如下: <!doctype html> <html lan ...
- FFmpeg编译:Linux下使用NDK编译FFmpeg
环境: Ubuntu 1.下载并解压FFmpeg3.4.zip(略) 2.将编译脚本放入到FFmpeg解压后的目录. 3.执行编译脚本: ./linux_build_android.sh linux_ ...
- 每日英语:Three Shows That Changed The Way Networks Think About Viewership
As we continue examining this season’s DVR success stories in The Blacklist and Sleepy Hollow it mak ...
- 【Socket】linux广播技术
1.mystery引入 1)本学期学的ARP协议和NTP协议都属于广播技术的实现,所以借此机会了解下广播技术的底层原理 2)在IP地址中,如果最后一个数字为255,则一定是一个广播 ...
- ubuntu下安装与卸载软件方法
http://www.cnblogs.com/JamyWong/archive/2009/11/19/1606442.html 1.通过deb包安装的情况:安装.deb包:代码:sudo dpkg - ...