gpt4 book ai didi

javascript - 如何实现这个继承模式: object. object.method

转载 作者:行者123 更新时间:2023-12-03 11:12:42 25 4
gpt4 key购买 nike

/image/wWZ37.png

上面的对象继承取自Mozilla's Tutorial

当我们声明一个工程师类型的新人时,它继承自 Employee 和 Workerbee,我们将其声明为:

var Mark = new Engineer() 

但是,我有一些代码,我需要使用此模式创建一个工程师:

var Mark = new Employee(id).WorkerBee(project).Engineer();

有人可以给我举一个例子来完成这项工作吗?下面是我的实现

    function Employee(id) {
//variables
this.id = id
this.name = "";
this.dept = "general";

//methods
this.getId = function (){
return this.id
}
}
Employee.prototype.WorkerBee = WorkerBee;
Employee.prototype.Engineer = Engineer

function WorkerBee(project) {
//variables
this.projectName = project
this.projects = [];
//methods
this.getProjectName = function (){
return this.projectName
}
return this
}
WorkerBee.prototype.Engineer = Engineer

function Engineer() {
//variables
this.dept = "engineering";
this.machine = "";
//methods
this.getDept = function(){
return this.dept
}
return this
}

var Mark = new Employee("5").WorkerBee("Secret Project").Engineer();
console.log(Mark.getId()) //prints 5
console.log(Mark.getProjectName()) //prints Secret Project
console.log(Mark.getDept()) //prints engineering

最佳答案

我假设您的问题是如何进行设置,以便您建议的语法可以完全按照您指定的方式工作:

var Mark = new Employee(id).WorkerBee(project).Engineer();

所以这篇文章不是关于继承的哲学,JS是否有类,或者经典继承是不是一件好事,或者嘿你应该使用类系统XYZ,或者其他什么,而是具体关于如何实现你的语法。

简而言之,如果您尝试遵循“经典”继承,那么您的语法将很难实现。当使用 new 调用时,您的 Employee 构造函数将需要返回一些内容,但此时它对对象最终会是什么一无所知。一旦对象被创建为 Employee,它就不能轻易地转换为子类,例如 WorkerBee 或 Engineer,尽管我认为人们可以使用 setPrototypeOf

相反,您可以使用一种模糊的寄生方法来继承:

function Employee(id) { 
this.id = id;

this.WorkerBee = function(project) {
this.project = project;

this.Engineer= function() {
...
return this;
};

return this;
};
}

这不是你爸爸用 Java 编程的继承模型。 Employee 只有一个构造函数。一个对象是 Engineer 还是其他任何对象纯粹取决于它恰好包含哪些属性或方法,这些属性或方法可以通过提供的便捷方法(例如 WorkerBee)放置在那里。其实例下没有实际的 WorkerBee“类”、构造函数或原型(prototype)。

这可能会让使用 Java 或 C++ 等语言的人感到困扰,但这并没有什么问题,有些人甚至可能会说它更像 JavaScript。有一些众所周知的问题,例如方法驻留在实例中,而不是原型(prototype)中。但是,如果您确实想要您建议的语法,您将需要朝这个方向或类似的方向前进。

关于javascript - 如何实现这个继承模式: object. object.method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27496813/

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