美文网首页
原型对象和原型链

原型对象和原型链

作者: 小小小前端 | 来源:发表于2018-06-09 23:06 被阅读0次

概念

1.原型对象(prototype) 只有函数有原型对象 相当于每个函数具有一个prototype属性,所指向的对象,就叫原型对象
2.原型链由对象的proto 继承连接下来,对象的proto指向其构造函数的原型对象,其中对象包括普通对象和函数对象

实例详解

    function Car() {
        
    }
    var car = new Car();

    console.log(car.__proto__ === Car.prototype);//car 是非函数对象 只有__proto__属性
    console.log(car.__proto__.__proto__  === Object.prototype)//car.__proto__.__proto__ = Car.prototype.__proto__ = Object.prototype
    console.log(car.__proto__.prototype)  //undefined
    //总结的普通对象的__proto__最终都指向Object.prototype,普通对象没有prototype

    console.log(Car.prototype)//   {constructor:function(){ }}
    console.log(Car.prototype.prototype)//undefined
    console.log(Car.prototype.__proto__ === Object.prototype)//Object.prototype
    console.log(Car.__proto__ ===Function.prototype)//
    console.log(Car.__proto__.__proto__)

    //所有函数对象都有原型对象   所有函数对象的(一级)__proto__指向Function.prototype(空函数) 最终指向Object.prototype

    console.log(Function.prototype === Function.__proto__);//true
    console.log(Function.prototype === Object.__proto__)//true

总结

所有普通对象的的最终proto 都指向Object.prototype
所有函数对象的一级proto 都指向Function.prototype(空函数) 最终proto还是指向Object.prototype
所有函数对象都有prototype,他们的原型对象proto最终都指向Object.proto,没有prototype对象,原型对象都有constructor属性 指向构造函数本身。函数对象包括 Function Object,Array,Date等函数。

继承

ES5


    function Person(name){
        this.name = name;
    }
    Person.prototype.getName = function(){
        console.log(this.name);
    }

    function Student(name){
        Person.call(this,name);
    }
    var __proto = Object.create(Person.prototype);
    __proto.constructor = Student;
    Student.prototype = __proto;
    Student.prototype.getAge = function(){
        console.log("我是学生")
    }
var stu  = new Student("li")
stu.getName();

ES6

class Person{
    constructor(name){
        this.name = name;
    }
    getName(){
        console.log(this.name)
    }
}

class Student extends Person{
    constructor(name){
        super(name);
    }
    getName(){
        super.getName();
    }
}
const stu  = new Student("li")
stu.getName();

相关文章

  • js原型链

    目录 1.对象的原型和原型链1.1什么是原型1.2查看原型1.3对象的原型链 2.使用构造函数2.1 函数的原型链...

  • JS-进阶-Day3

    原型链: 原型链:是一种关系,实例对象和原型对象之间的 关系,关系是通过原型(proto)来联系的 原型指向可以改...

  • 2022前端高频面试题

    JS相关 1.原型和原型链是什么 原型和原型链都是来源于对象而服务于对象的概念js中引用类型都是对象,对象就是属性...

  • 原型、原型链和原型继承

    原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(proto)来联系的;实例对象中有prot...

  • 原型、原型链和原型继承

    原型链 原型链是一种关系,实例对象和原型对象之间的关系,关系是通过原型(proto)来联系的; 实例对象中有pro...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • web前端 -- Day24 js高级

    原型链 重点 原型链: 是一种关系,实例对象和原型对象之间的关系,关系是通过原型(__proto__)来联系的。 ...

  • 📕 原型对象

    基本概念 原型 每一个对象都有它的原型对象,可以使用自己原型对象上的所有属性和方法 原型链 对象有原型,原型也是对...

  • js的原型对象&原型链&js的继承

    原型对象 & 原型链 原型对象分2种:显式原型和隐式原型。 显式原型就是我们常用的prototype属性,是函数的...

  • 原型对象和原型链二者的关系

    开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)...

网友评论

      本文标题:原型对象和原型链

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