js对象、原型链相关

本文深入探讨JavaScript中对象及原型链的工作原理,包括构造函数Person的实例化过程及其内部属性指向,解释如何通过原型链访问属性和方法,并介绍继承机制。

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

js对象、原型链相关

由于到了3月份就是各大公司校招的时候了,所以翻看以往的笔记,然后再次梳理一下掌握的只是

js对象

假设我们有以下代码

var Person = function(name, age){
var ancestor = 'Adam';
this.name = name || 'Ali';
this.age = age || '21';
this.getAncestor = function (){
            console.log(ancestor);
        }
    }
var p1 = new Person('Ben',18);

以下是我对以上代码操作后所产生的对象的指向图
这里写图片描述

  • 首先Person变量指向新开辟的function(name, age)的内存空间,这个function.prototype 指向一个无名对象,可以理解为Person对象本身,而这个无名对象的constructor又指向function(name,age)本身,即有Person.prototype.constructor === Person
  • p1是通过new操作符出来的,它会指向Person对象,但是this的指向是指向p1的,且有p1.constructor === Person.prototype.constructor
  • 原型链是以proto传递的,所以Person无名对象的proto指向Object
    以上就是我对js对象和原型链的理解笔记

js继承

以下是参考阮一峰老师的

function extend(Child, Parent) {
    var F = function(){};
    //1.改变F本身的Prototype的指向,指向Parent的无名对象
    //2.不直接改变Child的Prototype的原因是防止直接指向导致父对象和子对象指向同一个对象而造成修改子对象属性时会同时修改父对象
      //eg:下面执行Child.prototype.constructor = Child;
      //    会导致Parent.prototype.constructor === Child;(true)
   
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
    Child.uber = Parent.prototype;//这等于在子对象上打开一条通道,可以直接调用父对象的方法。这一行放在这里,只是为了实现继承的完备性,纯属备用性质。
}

通过深拷贝的继承,即主要解决对象中的属性为Array或Object时浅拷贝只拷贝引用而导致的问题

function deepCopy(p, c) {
    var c = c || {};
    for (var i in p) {
      if (typeof p[i] === 'object') {
        c[i] = (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      } else {
         c[i] = p[i];
      }
    }
    return c;
  }

参考资料:
Javascript面向对象编程(二):构造函数的继承
Javascript面向对象编程(三):非构造函数的继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值