gpt4 book ai didi

javascript - 如何使用原型(prototype)继承编写整洁灵活的复杂 javascript 应用程序

转载 作者:行者123 更新时间:2023-11-29 16:19:20 24 4
gpt4 key购买 nike

一段时间以来,我一直在开发 javascript 应用程序,通常使用较小的脚本来完成简单的任务,但也有使用 Dean Edwards' base2 library 的相当大且复杂的应用程序。用于创建具有继承的伪经典 OO 类,......在 javascript 中。

base2 库对我非常有用,主要是因为它使我能够遵循我非常熟悉的经典 OO 范例。我还知道其他几个可用于构建更健壮和成熟的 javascript 应用程序的框架(例如 backbone.js)。但我总觉得这种类型的库是一种“作弊”方式,即使用该语言实际上不适合的原则来构建一种编写代码的方法。

我一直在阅读有关定义对象/函数、实例化它们以及使用原型(prototype)继承实现多态性的不同方法。这确实是语言在基本层面上的工作方式,我觉得我应该利用它,而不是认为它很烦人或奇怪,并试图找到一种方法来按照我习惯的方式做事(经典的 OO 方式) ).

所以,看看那些没有使用这种类型的库的应用程序,似乎有很多方法可以编写您的应用程序,而对于传统的通用语言,如 Java、C++...,构建应用程序的正确方法似乎定义更明确(区分好代码和坏代码要容易得多)。如果明天有人问我:“开始为我开发 projectX”,我将不知道如何开始定义和构建我的对象,这样我可以确定在重组为时已晚时不会回来咬我整个事情。

如果使用原型(prototype)继承,专业的复杂 js 应用程序骨架会是什么样子,所以不使用任何类型的库来模仿经典的 OO,假设一个简单的 MVC 类型应用程序,但可以轻松扩展到更复杂的比例。如何定义我的对象?如何将对象/“类”组合在一起(命名空间)?换句话说:如何做到这一点而不至于弄得一团糟,没人再理解了?

最佳答案

在创建面向对象的 Javascript“类”时,我遵循两种模式(虽然 JS 中没有真正的类,但我们可以模仿它们)。首先是更熟悉的 OO 方式并且易于理解。

// in JS, functions can be used as OO classes
var Person = function(name) {
var self = this;

//private methods and attributes
this.getNickname = function(){
return "Yaka";
};

//public methods and attributes (return obj)
return {
getName : function() {
return name + ' ' + self.getNickname();
}
}
};

//static functions attached to 'Person' class
Person.hasBrain = function() {
return true;
}

此模型允许您为类提供私有(private)、公共(public)和静态部分,从而实现良好的封装。但这不是最佳方式,因为每个对象都会携带它自己的所有实例方法副本。您可以通过基于原型(prototype)的编程避免实例方法的多个副本:

// in JS, functions can be used as OO classes
var Person = function(name) {
this.name = null;
};

// use of prototypes improves performance and memory use
Person.prototype.getName = function() {
return this.name;
}

Person.prototype.setName = function(name) {
this.name = name;
}

对于传统的 OO 程序员来说,这看起来不是很熟悉,但却是使用 javascript 资源的最佳方式。它也适用于继承。

var Manager = function() {}
Manager.prototype = new Person();

在实践中,我对应用程序中大量使用的基类/框架类使用原型(prototype)方法。对于偶尔使用或很少使用的类,我使用之前讨论的方法。

我还建议您使用 AMD 库,例如 requirejs,并为每个物理文件定义一个类。然后使用构建优化器将文件优化为单个脚本。

我从 BoilerplateJS 中的单元测试中复制了以上两种方法引用架构。看看 BoilerplateJS 中的代码,它会给你更多关于如何使用 JS 进行复杂应用程序开发的想法。

免责声明:我是 BoilerplateJS 的主要作者

关于javascript - 如何使用原型(prototype)继承编写整洁灵活的复杂 javascript 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12265219/

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