美文网首页
JavaScript原型和原型链

JavaScript原型和原型链

作者: 前端小菜_蓝草 | 来源:发表于2018-01-03 17:59 被阅读0次
js里,一切皆对象,但有普通对象和函数对象之分,通过new Function()创建的对象就是函数对象。
  1. 原型对象:
    每个对象都有 ___proto____ 属性,但只有函数对象才有 prototype 属性。
    每个函数对象都有一个prototype属性,这个属性指向函数的原型对象(prototype),因此其实原型对象(Person.prototype)是 构造函数(Person)的一个实例,也就是一个普通对象,具备普通对象的一切特性,但是,需要强调下Function.prototype是个函数对象,因为函数对象的实例也是个函数对象,并不是普通对象。原型对象主要是用来继承的.

在默认情况下,所有的原型对象都会自动获得一个 constructor(构造函数)属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person),换成代码的意思就是Person.prototype.constructor == Person。

  1. ___proto____:
    JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto 的内置属性,用于指向创建它的构造函数的原型对象。
    对象 person1(Person对象的实例) 有一个 proto属性,创建它的构造函数是 Person,构造函数的原型对象是 Person.prototype ,所以:
    Person.prototype.constructor == Person;
    person1.__proto__ == Person.prototype;
    person1.constructor == Person;
    不过,要明确的一点,上面这个连接存在于实例(person1)与构造函数(Person)的原型对象(Person.prototype)之间,而不是存在于实例(person1)与构造函数(Person)之间。
    提示:因为绝大部分浏览器都支持___proto____属性,所以它才被加入了 ES6 里。
    Object.prototype.__proto__==null,这里这个为null,比较特殊,它是原型链的顶端。
  2. 函数对象:
    所有函数对象的__proto____都指向Function.prototype,它是一个空函数(Empty function)。而Function.prototype的___proto____是这样的:
    Function.prototype.__proto__ === Object.prototype。这说明所有的构造器也都是一个普通 JS 对象,可以给构造器添加/删除属性等。同时它也继承了Object.prototype上的所有方法:toString、valueOf、hasOwnProperty等。
    写原型有两种写法区别:
    修改原型:Person.prototype.getName = function() {};
    重写原型:Person.prototype = { getName: function() {} };
    区别在与第二种是使用对象直接量(直接量也称为字面量,是JavaScript中一种对象的表示(或者说创建)方式,它可以通过直接给变量赋上JavaScript中原生对象值的方式从而转换为一个相应的对象)方式,这种方式定义的对象,它的构造器(constructor)指向的是根构造器Object。
原型和原型链是JS实现继承的一种模型。原型链的形成是真正是靠___proto____ 而非prototype。

相关文章

  • 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 中最经典的问题之一,而构造函数又是原型和原型链的基础,所以先了解清...

  • JavaScript原型对象与原型链

    一、前言 原型和原型链是 JavaScript中不可避免需要碰到的知识点,在刚开始学习 JS 时,原型和原型链都是...

网友评论

      本文标题:JavaScript原型和原型链

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