gpt4 book ai didi

javascript - 继承类的对象可以访问父类的所有属性和方法

转载 作者:行者123 更新时间:2023-11-30 11:35:10 25 4
gpt4 key购买 nike

我的代码是这样的:

function Person(firstName) {
"use strict";
this.firstName = firstName;
this.fullName = "ABC";
this.greeting = function (name) {
console.log("Hi " + name);
};
}

Person.prototype.hello = function () {
"use strict";
console.log("Hello");
};

function Car(model, year) {
"use strict";
this.model = model;
this.year = year;
}

Car.prototype = new Person();
var mercedes = new Car("CS300", 2017);
mercedes.greeting("mer");
console.log(mercedes.fullName );

为什么对象 Mercedes 可以访问属性 fullName 和方法 greeting() 即使我直接在构造函数中声明它们 Person.prototype 中的 >Person ?

最佳答案

发生这种情况是因为 Car 的原型(prototype)使用了 Person 函数。因此,当在 mercedes 上找不到 key 时,JavaScript 引擎将查找原型(prototype)链以找到它。

您可以访问原型(prototype)对象作为 mercedes.__proto__,以验证这一点。检查以下代码段。

function Person(firstName) {
"use strict";
this.firstName = firstName;
this.fullName = "ABC";
this.greeting = function (name) {
console.log("Hi " + name);
};
}

Person.prototype.hello = function () {
"use strict";
console.log("Hello");
};

function Car(model, year) {
"use strict";
this.model = model;
this.year = year;
}

Car.prototype = new Person();
var mercedes = new Car("CS300", 2017);

console.log(mercedes.__proto__);

一般来说,如果 JavaScript 引擎在对象的 proto 中找不到您要查找的键,那么它会上升到 proto 的 proto,以便在那里找到键。这种情况一直发生,直到我们找到 key 或到达 null(任何原型(prototype)链的末尾)。如果我们到达 null,那么我们会得到消息,我们正在寻找的键是 undefined,因为它在原型(prototype)链中的任何地方都找不到。例如,让我们寻找 mercedes 的键 foo 的值。

function Person(firstName) {
"use strict";
this.firstName = firstName;
this.fullName = "ABC";
this.greeting = function (name) {
console.log("Hi " + name);
};
}

Person.prototype.hello = function () {
"use strict";
console.log("Hello");
};

function Car(model, year) {
"use strict";
this.model = model;
this.year = year;
}

Car.prototype = new Person();
var mercedes = new Car("CS300", 2017);

console.log(mercedes.foo);

正如您现在注意到的,undefined 打印在控制台上。

这叫做 prototypal inheritance它是在 JavaScript 中实现继承的机制。

关于javascript - 继承类的对象可以访问父类的所有属性和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44772368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com