Javascript原型链详解
来源:互联网 发布:nginx 安装 cgi 编辑:程序博客网 时间:2024/06/04 19:43
1、prototype属性仅属于类,即函数对象!!
2、__proto__属于所有对象,但是非标准规定,许多浏览器并不对外公开这个属性,Firefox暴露出这一属性,仅供开发人员理解,但不推荐开发中使用。而Object.getPrototypeOf()是标准所有的。
3、constructor属于所有对象,函数对象的constructor为 function Function(){。。。。}
4、alert()对对象的结果为[objectObject],建议用console.log(),可以在控制台打印出对象的详细信息。alert()对函数对象是显示整个的函数定义。
5、除Function.prototype类型为“function”,剩余所有的prototype的类型均为"object"。
6、原型链的意义:
1、清楚对象的继承结构,知道它有哪些父类(父类:指的是该对象原型链向上方向的对象);比如Object.__proto__ == Function.prototype,所以Object instanceof Function。又Function.__proto__.__proto__== Object.prototype,所以Function instanceof Object.
a instanceof B运算符看的是该a对象原型链上的所有__proto__,若有B.prototype,则运算结果为true。具体见后面的文章,关于instanceof操作符的运算规则。
2、搜索对象的属性时,先会在类中查找,找不到就在其原型对象查找,再在该原型对象的原型链上查找,所以在Object.prototype对象上加属性,会为所有对象加上该属性。
7、某类的原型对象是该类的实例(除非显式指定),即 A.prototype.constructor == A
8、函数对象的原型对象是Function.prototype,是Empty函数对象,alert(Function.prototype)会显示function Empty(){},但是alert(Empty);或者alert(Function.prototype ==Empty)会报错,说Empty is not defined。
9、*.prototype.__proto__ ==Object.prototype,除了Object.prototype.__proto__ == null
10、alert(Function.prototype.prototype)显示undefined。
11、在 JavaScript 中,每个对象都保持着一块隐藏的状态 —— 一个对另一个对象的引用,也被称作原型。即__proto__属性。
12、new运算符的执行过程,及call()方法的作用。
13、拓展:
alert(typeof null); //object
alert(null instanceof Object); //false !! null 不是Object的实例
alert(Object.prototype instanceof Object); //false !! Object.prototype.__proto__为null,而null不是Object的实例
alert(Child.prototype.constructor == Child) //true 原型对象的constructor属性为该构造函数对象
alert(Child.prototype instanceof Child); //false !! 虽然Child.prototype.constructor == Child,但是Child.prototype的原型链上
//没有Child的实例
alert(new Child() instanceof Child); //true new Child()的原型为Child.prototype,其Child.prototype.constructor==Child
所以不是所有的对象均为Object对象实例。应该是除了Object.prototype除外的所有对象均为Object对象的实例。
Object instanceof Object 为true,Function instanceof Function也为true。
参考:http://www.nowamagic.net/librarys/veda/detail/1648
代码:
<script language="javascript">function Base() {this.b=22;}function Child() {/*this.object = Object;this.object();*/this.base = Base;this.base();this.a = function() {window.alert(2);}}Child.prototype = Base.prototype;var c = new Child();alert(c instanceof Base);Object.prototype.a = function(){window.alert(4)};c.a();console.log(Child.prototype);alert(Object.prototype.constructor == Object);alert(Function.prototype.prototype);alert(Function.prototype != Empty); //报错,没有Empty对象//alert(Function.prototype);//alert(Object.prototype);//alert(Child.prototype == c.__proto__);//alert(Child.prototype == Object.getPrototypeOf(c));//alert(Object.prototype.constructor == Object);//alert(Object.__proto__ == Function.prototype);//alert(Function == Function.prototype.constructor);//alert(Object.prototype == Function.prototype.__proto__);//alert(Object instanceof Function);//alert(Function instanceof Object); //Function 是 Function类的实例,而Function类的基类是Object,所以Function是Object的实例</script>
原型链
ps:上面图有个错误,对象是没有constructor属性的,它继承于其原型对象!!
- JavaScript 原型链详解
- Javascript原型链详解
- javascript原型链详解
- javascript原型链详解
- JavaScript原型链详解
- JavaScript prototype原型和原型链详解
- JavaScript-- prototype原型和原型链详解
- JavaScript原型及原型链详解
- javascript原型与原型链终极详解
- JavaScript中原型和原型链详解
- JavaScript原型及原型链详解
- JavaScript原型和原型链详解
- JavaScript中原型和原型链详解
- javascript笔记--原型和原型链详解
- javascript 原型与原型链详解
- js javascript 原型链详解
- JavaScript学习--Item15 prototype原型和原型链详解
- JavaScript学习总结(五)原型和原型链详解
- leetcode 155 Min Stack C++ 24ms solution
- Http协议介绍
- 电路入门小常识:电路常识性概念——输入、输出阻抗
- 初识Kettle
- QtConcurrent 名字空间 run函数
- Javascript原型链详解
- Android中发送消息的几种方式
- iBatis简单入门教程
- Ubuntu下 ssh : connect to host localhost port 22:Connection refused
- jquery 操作 class 属性
- Bigfish的安装过程
- 自定义hadoop map/reduce输入文件切割InputFormat 更改输入value的分隔符
- servlet路径
- HDU_5500 Reorder the Books