js: 原型、原型链、继承

本文深入探讨了JavaScript中的原型和继承机制,详细解释了本地属性与原型属性的区别,以及如何通过原型链实现继承。同时,提供了实用的方法,如使用Object.getPrototypeOf获取原型,构造函数检测原型,以及如何检测私有属性。

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

当前对象:

本地属性 -> 私有属于: 本地属性被修改,只有当前对象的该属性被修改

v2-1f7038adf8503ee889141fd1db7bd2e7_b.jpg

原型对象:

原型属性 -> 公共属性: 原型属性被修改,所有对象的该属性被修改

v2-2ba1a7bcfe2198accfe2daf027e220ec_b.jpg
        <!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>原型、原型链、继承</title>
</head>
<body>
    <script>
       function Book() {
           this.name = "book";
           this.page = 10;
           Book.prototype.author = "fanghuayong";
        }
        var book1 = new Book();
        var book2 = new Book();
    </script>
</body>
</html>
      


继承原则:

  1. 本地有的用本地
  2. 本地没有的找原型
  3. 原型没有的找原型对象的原型(简称: 原型链)
        <!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>原型、原型链、继承</title>
</head>
<body>
    <script>
        function CountryMake() {
            this.country = "China"
        }
        function Author() {
            this.author = "fanghuayong";
        }
        Author.prototype = new CountryMake();
        function Book() {
            this.name = "book";
            this.page = 10;
        }
        Book.prototype = new Author();

        var book1 = new Book();
        var book2 = new Book();
    </script>
</body>
</html>
      

v2-2897d30cf4cff81105f277efd31ef872_b.png


实用方法:

一. 获得原型: Object.getPrototypeOf

使用这个方法this指向原型,可以修改原型对象上的属性,如果直接使用实列来修改,修改的则会成本地属性,使用该方法修改的是原型对象上的属性。

        function CountryMake() {
    this.country = "China"
 }
 function Author() {
     this.author = "fanghuayong";
 }
 Author.prototype = new CountryMake();
 function Book() {
     this.name = "book";
     this.page = 10;
 }
 Book.prototype = new Author();

 var book1 = new Book();
 var book2 = new Book();

 var bookPrototype = Object.getPrototypeOf(book1);
 var authorPrototype = Object.getPrototypeOf(bookPrototype);

      

v2-cc69270fd6c04c56c63b4d1c5b94e004_b.jpg


二. 构造函数检测原型: 构造函数.isPrototypeOf(对象)

如果book1实列中包含对应(比如Author、CountryMake等)原型链上的属性,则返回true,反之false

        var book3 = {} // 增加一个不是从Book构造函数new的对象book3

      

v2-5b76aa8577ee5a757edf1f5007e944cb_b.jpg


三: for/in ->可枚举属性,包括原型。

        for(var i in book1) {
    console.log(i + " : " + book1[i])
}

      

v2-83c8b036ed1b9fc4f50c4f9a12399fa2_b.jpg


四. 检测私有属性.hasOwnProperty,是则返回true,反之false

v2-f25a281962456d37d83c455a4991178d_b.jpg


五: Object.getOwnPropertyNames可以返回私有属性的所有(包括不可枚举)名称,并放在一个数组中。

v2-9eab18a69d4986805347a6e07a9ab766_b.jpg


六: Object.key可以返回可枚举私有属性的名称

v2-4ed9c31021e42f33113783d6b0219219_b.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值