JavaScript中的原型链是什么?

古哥 网站咨询

介绍JavaScript中的原型链概念和实现方式

回复

共1条回复 我来回复
  • 智能AI的头像
    智能AI
    专业的OpenAI智能系统,使用的模型为:gpt-3.5-turbo。
    评论

    JavaScript中的原型链是一种用于实现继承的机制。每个JavaScript对象都拥有一个原型(prototype)属性,它指向另一个对象,而这个对象又有自己的原型,依此类推,一直到最终的原型为null,以形成一个链式的引用结构,这就是JavaScript中的原型链。

    在JavaScript中,访问一个对象的属性时,会先在该对象自身查找,如果找不到,则会沿着该对象的原型链往上查找,直到查找到原型链的顶端为止。如果还是没有找到,则返回undefined。这种机制实现了原型继承,子类可以继承父类的属性和方法,节省了代码量,提高了可复用性。

    JavaScript中的原型链是通过对象的3个属性来实现的:__proto__、prototype和constructor。

    __proto__
    每个JavaScript对象都有一个名为__proto__的隐藏属性,它指向该对象的原型。比如,执行以下代码:

    “`
    let obj = {};
    console.log(obj.__proto__);
    “`

    输出结果为:

    “`
    Object.prototype
    “`

    Object.prototype是所有JavaScript对象的最顶层的原型对象。可以通过它来访问一些通用的方法和属性,比如toString()方法。

    prototype
    在JavaScript中,函数也是对象,每个函数都有一个prototype属性,它指向一个对象,是该函数所创建的所有对象的原型。比如,执行以下代码:

    “`
    function Person(){}
    console.log(Person.prototype);
    “`

    输出结果为:

    “`
    Person {}
    “`

    Person.prototype就是Person函数所创建的所有对象的原型对象,它包含了所有该函数下的公共方法和属性。

    constructor
    每个JavaScript对象都有一个名为constructor的属性,它指向该对象的构造函数。比如,执行以下代码:

    “`
    let obj = {};
    console.log(obj.constructor);
    “`

    输出结果为:

    “`
    function Object() { [native code] }
    “`

    obj的构造函数是Object()。构造函数是用来创建对象的函数,它有一个prototype属性,指向该函数所创建的所有对象的原型对象。

    由上述介绍可知,JavaScript中的原型链是通过对象的__proto__属性实现的。当访问一个对象的属性时,JavaScript引擎首先在该对象自身查找,如果找不到,则沿着该对象的__proto__属性往上查找,找到第一个包含该属性的对象,即返回该属性的值。如果一直到原型对象仍然没找到,返回undefined。

    下面是一个实现原型链继承的例子:

    “`
    function Animal(name){
    this.name = name;
    }
    Animal.prototype.sayName = function(){
    console.log(this.name);
    }

    function Dog(name){
    Animal.call(this, name);
    }
    Dog.prototype = Object.create(Animal.prototype);
    Dog.prototype.constructor = Dog;

    let dog = new Dog(‘小狗’);
    dog.sayName(); //输出:小狗
    “`

    在这个例子中,我们定义了一个Animal构造函数,里面有一个属性和一个方法。我们又定义了一个Dog构造函数,继承了Animal构造函数,这里用到了Animal.call(this, name)来实现。接着,我们设置了Dog.prototype的值为Animal.prototype的一个新实例,这样,Dog创建的对象就可以继承Animal的方法和属性了。最后,我们将Dog.prototype.constructor设置为Dog本身,以保证constructor指向Dog构造函数。

    总结:

    JavaScript中的原型链是用于实现继承的机制。每个对象都有一个原型属性,指向另一个对象,形成一个链式的引用结构,一直到原型为null为止。对象的__proto__、prototype和constructor属性是实现原型链的重要组成部分。原型链的机制可以实现原型继承,提高代码可复用性,并节省代码量。

    2023年06月10日 16:58 0条评论
微信小程序
微信公众号