jquery一张图
2015-08-15 13:07
543 查看
拼装整理的
/**
this:
永远指向调用者上下文,总是涉及到上下文切换。
__proto__:
指向构造函数时的prototype。
prototype:
只有函数才有prototype 。其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用,
换句话说,他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__。
------------------------------------
var Person = function () { };
var p = new Person();
new的过程拆分成以下三步:
<1> var p={}; //也就是说,初始化一个对象p。
<2> p.__proto__=Person.prototype; //prototype只是在new的时候有着一定的价值,即_proto__指向构造函数时的prototype
<3> Person.call(p); //也就是说构造p,也可以称之为初始化p。
》call:将p作为Person()的上下文
------------------------------------
首先,并不是所有的对象都有prototype,只有函数才有prototype。实例没有prototype。
其次,所有的对象(函数也是对象,Function的实例)都有__proto__的内部属性,指向构造函数时的prototype。
查询属性(this.或funcName.prototype暴露)的步骤:
1.对象在调用一个方法时会首先在自身里寻找是否有该方法,
2.若没有,则通过内部的__proto__属性去自己的构造函数时的prototype上去寻找,
3.若此prototype上没有,则通过此prototype内部的__proto__属性去此prototype的构造函数时的prototype上去寻找
4.依次层层递进,直到**=>__proto__=>__proto__=null为止,这样往上追溯的整个过程,即原型链。
重指定函数funcName的prototype,原实例无法再继承(因为原实例_proto__指向构造函数时的prototype),但新实例继承。
》这样新实例会很乱,建议不要重指定函数的prototype。
例如:
function Person(){};
var fs1 = new Person();
//fs1.__proto__==Person.prototype都是{constructor:Person(),__proto__:Object}
fs1.constructor.prototype==fs1.__proto__
》true
fs1.constructor.prototype==Person.prototype
》true
//重指定构造函数的prototype
Person.prototype={};
fs1.constructor.prototype==Person.prototype
》true
fs1.constructor==Person
》true
//fs1.__proto__还是{constructor:Person(),__proto__:Object}
fs1.constructor.prototype==fs1.__proto__
》false
Person.prototype.v1=1;
//原实例无法再继承
fs1.v1
》undefined
*/
/**
this:
永远指向调用者上下文,总是涉及到上下文切换。
__proto__:
指向构造函数时的prototype。
prototype:
只有函数才有prototype 。其实prototype只是一个假象,他在实现原型链中只是起到了一个辅助作用,
换句话说,他只是在new的时候有着一定的价值,而原型链的本质,其实在于__proto__。
------------------------------------
var Person = function () { };
var p = new Person();
new的过程拆分成以下三步:
<1> var p={}; //也就是说,初始化一个对象p。
<2> p.__proto__=Person.prototype; //prototype只是在new的时候有着一定的价值,即_proto__指向构造函数时的prototype
<3> Person.call(p); //也就是说构造p,也可以称之为初始化p。
》call:将p作为Person()的上下文
------------------------------------
首先,并不是所有的对象都有prototype,只有函数才有prototype。实例没有prototype。
其次,所有的对象(函数也是对象,Function的实例)都有__proto__的内部属性,指向构造函数时的prototype。
查询属性(this.或funcName.prototype暴露)的步骤:
1.对象在调用一个方法时会首先在自身里寻找是否有该方法,
2.若没有,则通过内部的__proto__属性去自己的构造函数时的prototype上去寻找,
3.若此prototype上没有,则通过此prototype内部的__proto__属性去此prototype的构造函数时的prototype上去寻找
4.依次层层递进,直到**=>__proto__=>__proto__=null为止,这样往上追溯的整个过程,即原型链。
重指定函数funcName的prototype,原实例无法再继承(因为原实例_proto__指向构造函数时的prototype),但新实例继承。
》这样新实例会很乱,建议不要重指定函数的prototype。
例如:
function Person(){};
var fs1 = new Person();
//fs1.__proto__==Person.prototype都是{constructor:Person(),__proto__:Object}
fs1.constructor.prototype==fs1.__proto__
》true
fs1.constructor.prototype==Person.prototype
》true
//重指定构造函数的prototype
Person.prototype={};
fs1.constructor.prototype==Person.prototype
》true
fs1.constructor==Person
》true
//fs1.__proto__还是{constructor:Person(),__proto__:Object}
fs1.constructor.prototype==fs1.__proto__
》false
Person.prototype.v1=1;
//原实例无法再继承
fs1.v1
》undefined
*/
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- JavaScript演示排序算法
- 5个常见可用性错误和解决方案
- jQuery Ajax 跨域调用
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- jQuery菜单插件用法实例
- JQuery 初体验(建议学习jquery)
- Jquery实现的table最后一行添加样式的代码
- jQuery 练习[一] 学习jquery的准备工作
- jquery获得页面元素的坐标值实现思路及代码
- 使用Browserify配合jQuery进行编程的超级指南
- jquery如何实现在加载完iframe的内容后再进行操作
- jquery $.ajax()取xml数据的小问题解决方法
- jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
- Jquery 表单取值赋值的一些基本操作
- jQuery实现复选框批量选择与反选的方法
- js可突破windows弹退效果代码