JS 原型指向、原型链以及继承

本文详细介绍了JavaScript中的原型概念,包括构造器constructor和原型指向 proto 的属性。接着,阐述了原型链的工作原理,说明了如何通过对象的__proto__属性查找属性值,并指出原型链的终点是Object的原型,其原型为null。此外,还讨论了继承的定义,即通过设置子类的原型为父类的实例来实现继承。在访问对象的属性或方法时,会沿着原型链查找直至找到为止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原型指向

   结构:原型是一个对象,在原型中通常拥有两个属性:

  (1)构造器constructor:该属性指向了这个类本身

  (2)原型指向:——proto——:该属性指向原型本身,提供给通过类创建的对象使用

 console.log(lb.__proto__ == Person.prototype);

eg:

 function Person(userName, sex) {
        this.userName = userName;
        this.sex = sex;
    }
    console.log(Person.prototype);//Object { … }
    var lb = new Person('李白', '男');
    console.log('--->', lb.__proto__);//Object { … }
    console.log(lb.__proto__ == Person.prototype);//true

二、原型链

1、定义:由【对象的__proto__属性】和【对象的构造函数的原型的__proto__属性】构成的链式结构称为原型链。

2、注意:

  ①原型的终点是object的原型,object的原型的原型是null;

  ②对象查找属性值时,首先在对象内部查找;没有时去原型中查找;再没有时延原型链向上查找;没有值报错或者undefined。

     实质就是获取原型链上的值。

   ③定义到object原型上的属性、对象都可以访问(函数也可以)。

3、eg:

 function Person(userName, sex) {
        this.userName = userName;
        this.sex = sex;
    }
    var df = new Person('杜甫','男');

 (1)对象构造函数的原型

console.log(df.__proto__);//Object { … }

 (2)对象构造函数原型的原型 --->Object的原型

 console.log(df.__proto__.__proto__);//Object { show: "呵呵", … }

 (3)object已经到达顶层,没有比她更高的类

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

eg2:

function test(){};
    var func1 = new Function('a','b','console.log(a+b)');//30
    func1(10,20);
    console.log('func1--->',func1.__proto__ == Function.prototype);//func1---> true
    console.log(func1.__proto__.__proto__);//Object { show: "呵呵", … }
    console.log(test.show);//呵呵

三、继承

1、定义:设置【子类的原型】是【父类的实例(具象化的对象)】的操作,被认为是js中的继承。

2、访问对象的属性或方法:

  ①首先在本身中查找是否拥有这个属性或方法;

  ②如果没有就沿着原型链逐级查找直到找到object为止;

  ③在任何一级寻找到这个属性或者方法都视为对象拥有这个属性或方法。

 function MaYun() {
        this.money = '没有钱'
    }
    MaYun.prototype.money = '很多钱';
    var maYun = new MaYun();

    function Son(userName) {
        this.userName = userName;
    }
    Son.prototype = maYun;
    var son = new Son('小刚');
    console.log(son.money);//没有钱

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值