美文网首页
NFH.015 - Javascript原型和原型链

NFH.015 - Javascript原型和原型链

作者: 旅行的意义zxy | 来源:发表于2017-02-25 17:20 被阅读31次

2.25学习经验分享#

Bruce_Zhu于2017.2.25


一. 原型对象
在JavaScript 中,每当定义一个对象(函数)时候,对象中都会包含一些预定义的属性。其中函数对象的一个属性就是原型对象 prototype。注:普通对象没有prototype,但有proto属性。

原型对象其实就是普通对象(Function.prototype除外,它是函数对象,但它很特殊,他没有prototype属性(前面说道函数对象都有prototype属性))。看下面的例子:
<pre>
function f1(){};
console.log(f1.prototype) //f1{}
console.log(typeof f1. prototype) //Object
console.log(typeof Function.prototype) // Function,这个特殊
console.log(typeof Object.prototype) // Object
console.log(typeof Function.prototype.prototype) //undefined
</pre>
从这句console.log(f1.prototype) //f1 {} 的输出就结果可以看出,f1.prototype就是f1的一个实例对象。就是在f1创建的时候,创建了一个它的实例对象并赋值给它的prototype,基本过程如下:
<pre>
var temp = new f1();
f1. prototype = temp;
</pre>
所以,Function.prototype为什么是函数对象就迎刃而解了,上文提到凡是new Function ()产生的对象都是函数对象,所以temp1是函数对象。
<pre>
var temp1 = new Function ();
Function.prototype = temp1;
</pre>
那原型对象是用来做什么的呢?主要作用是用于继承。举了例子:
<pre>
var person = function(name){
this.name = name
};
person.prototype.getName = function(){
return this.name;
}
var zjh = new person(‘zhangjiahao’);
zjh.getName(); //zhangjiahao
</pre>
从这个例子可以看出,通过给person.prototype设置了一个函数对象的属性,那有person实例(例中:zjh)出来的普通对象就继承了这个属性。

二.原型链
JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype。以上面的例子为例:
<pre>
console.log(zjh.proto === person.prototype) //true
</pre>
同样,person.prototype对象也有proto属性,它指向创建它的函数对象(Object)的prototype
<pre>
console.log(person.prototype.proto === Object.prototype) //true
</pre>
继续,Object.prototype对象也有proto属性,但它比较特殊,为null
<pre>
console.log(Object.prototype.proto) //null
</pre>
我们把这个有proto串起来的直到Object.prototype.proto为null的链叫做原型链。如下图:

原型链.png

相关文章

  • NFH.015 - Javascript原型和原型链

    2.25学习经验分享# Bruce_Zhu于2017.2.25 一. 原型对象在JavaScript 中,每当定义...

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • 原型和原型链篇

    原型和原型链 1.理解原型设计模式以及JavaScript中的原型规则 原型设计模式JavaScript是一种基于...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

  • js原型、原型链、继承的理解

    一、原型、原型链 原型是Javascript中的继承的基础,JavaScript的继承主要依靠原型链来实现的。 原...

  • 【javascript】继承

    javascript只支持实现继承,而且继承主要是依靠原型链来实现的。 原型链 javascript将原型链作为实...

  • 4.4 JavaScript

    4.4.1. 原型链 4.4.1.1. 显式原型和隐式原型   JavaScript的原型分为显式原型(expli...

  • 关于JS中的原型和原型链

    目录 关于js 对象和原型 原型链 基于原型链的继承 参考资料ECMAScript 6 入门JavaScript原...

  • javascript碎片知识001

    javascript中的对象(原型,原型链) 什么是原型? 原型是JavaScript中的继承的基础,JavaSc...

  • JS进阶(1) —— 人人都能懂的构造函数

    大家都知道原型和原型链是 JavaScript 中最经典的问题之一,而构造函数又是原型和原型链的基础,所以先了解清...

网友评论

      本文标题:NFH.015 - Javascript原型和原型链

      本文链接:https://www.haomeiwen.com/subject/dpxnwttx.html