浅谈对js原型的理解
一. 在JavaScript中,一切皆对象,每个对象都有一个原型对象(prototype),而指向该原型对象的内部指针则是__proto__。当我们对对象进行for in 或者for of遍历时,就会通过__proto__依次遍历对象关联的所有对象。这就是原型链,遍历所有对象的父对象直到object直至null。
function Person(name,work){
    this.name = name;
    this.work = work;
}
Person.prototype.show = function(){
    console.log(this.name);
}
var person = new Person('nicknailo','全栈开发');
console.log(person.__proto__ === Person.prototype); //true
console.log(Person.prototype.__proto__);//Object 或者{}
console.log(person.__proto__.__proto__.__proto__);//null
console.log(Person.prototype);//Person { show: [Function] }
person对象的原型指向 Person.prototype,Person.prototype指向object,object 指向 null。蕴含了一个哲理,无中生有。
二.

这是一张描述了Object、Function以及一个函数实例Foo他们之间原型之间联系。如果理解了上面的概念,这张图是不难读懂。
Function.prototype.proto 指向了 Object.prototype,这说明Function.prototype 是一个 Object实例,那么应当是先有的Object再有Function。
但是Object.prototype.constructor.proto 又指向了 Function.prototype。这样看来,没有Function,Object也不能创建实例。
三.Person.prototype只是对象的原型上(constructor)扩展的属性。
var animal = function(){};
var dog = function(){};
animal.price = 2000;
dog.prototype = animal;
var tidy = new dog();
console.log(dog.price + " : dog.price");//undefined : dog.price
console.log(tidy.price + " : tidy.price"); //2000 : tidy.price
上述代码可以看出来,实例tidy只与原型对象dog.prototype存在关联,上面的代码可以看成是 dog.prototype.price = 2000;
浅谈对js原型的理解的更多相关文章
- 浅谈对Js闭包的理解
		
理解Js的闭包,首先让我们先看几个概念 执行环境(executive environment)每个函数都有自己的执行环境,匿名函数默认为全局环境. 作用域链(scope chain)子函数继承父函数, ...
 - 37.js----浅谈js原型的理解
		
浅谈Js原型的理解 一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面 ...
 - 浅谈javascript的原型及原型链
		
浅谈javascript的原型及原型链 这里,我们列出原型的几个概念,如下: prototype属性 [[prototype]] __proto__ prototype属性 只要创建了一个函数,就会为 ...
 - 浅谈Vue.js
		
作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...
 - 浅谈JavaScript之原型
		
上一篇谈new关键字也是给这一篇写关于原型的文章买个伏笔,我对原型的理解可能会有偏差,如有错误,望指正一定修改,望各位道友如果想真正的理解原型的概念一定要再看完各方言论再回归教材. 言归正传谈原型,首 ...
 - js原型链理解(2)--原型链继承
		
1.原型链继承 2.constructor stealing(构造借用) 3.组合继承 js中的原型链继承,运用的js原型链中的__proto__. function Super(){ this.se ...
 - 浅谈Js原型的理解
		
一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了! 在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象 语言的小白来说,有理解不了里面的专有名词!如果你没 ...
 - 闲聊——浅谈前端js模块化演变
		
function时代 前端这几年发展太快了,我学习的速度都跟不上演变的速度了(门派太多了,后台都是大牛公司支撑类似于facebook的react.google的angular,angular的1.0还 ...
 - 浅谈对ionic项目的理解
		
在思考怎么将客户端app连接到服务器的时候,就在想ionic项目的本质是什么,一开始因为ionic serve这一命令,我以为它自己就是个服务器,但是后来一细想又感觉不是这样,不然客户端又该怎么和服务 ...
 
随机推荐
- Problem B. Harvest of Apples 莫队求组合数前缀和
			
Problem Description There are n apples on a tree, numbered from 1 to n.Count the number of ways to p ...
 - Spring Filter过滤器,Spring拦截未登录用户权限限制
			
转载自:http://pouyang.iteye.com/blog/695429 实现的功能:判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面. 比较好的做法是不管什 ...
 - executeQuery与executeUpdate
			
executeQuery就是查 executeUpdate是更新,那就是增删改,和新建 吗?
 - sql cmd命令执行sqlserver的sql文件
			
有的时候,我们通过Log Explorer工具根据日志生成的回滚脚本,或者其他情况我们得到的脚本文件,通过sqlserver打开脚本文件的方式不爽,我们可以这样: 方式一: osql -S . -U ...
 - jQuery中val()、text()、html()之间的差别
			
一.括号里没有值时表示取值 val获取表单中的值: text获取对象中的文本内容,不包含html标签: html获取对象中的内容,包括html标签 <!DOCTYPE HTML> & ...
 - 解决SpringSecurity限制iframe引用页面的问题
			
使用Spring Security的过程中,需要使用iframe来引入其他域的页面,页面会报X-Frame-Options的错误,试了好几种方法一直未能很好的解决这个问题. 这里涉及到Spring S ...
 - dijkstra spfa prim kruskal 总结
			
最短路和最小生成树应该是很早学的,大家一般都打得烂熟,总结一下几个问题 一 dijkstra O((V+E)lgV) //V节点数 E边数 dijkstra不能用来求最长路,因为此时局部最优解已经 ...
 - 【BZOJ】4430: [Nwerc2015]Guessing Camels赌骆驼
			
[题意]给定三个长度为n的排列,求在三个排列中顺序相同的数对个数. [算法]逆序对 [题解]很容易联想到NOIP火柴排队,涉及顺序问题显然和逆序对息息相关. 一个数对如果在三个排列中顺序不同,一定是1 ...
 - dot.js使用心得
			
一.dot.js介绍 最近用到的数据模板引擎有很多,今天讲的doT.js也是其中一种. doT.js的特点是体积小,速度快,并且不依赖其他插件. 官网下载:http://olado.github.io ...
 - bzoj 1968 数学
			
在1-n所有数中,i一共可以成为n/i个数的约数,也即所有的约数中有n/i个i,所以扫一遍累加答案就好了. /********************************************* ...