理解Javascript';s原型来自Java和C++;背景 我的编程背景主要是爪哇、C++和C语言。我最近开始接触Javascript和web开发,我基本掌握了如何使用Javascript和JQuery操作DOM元素以及前端所需的任何其他操作
然而,我似乎无法理解的是JS中的原型设计。我已经读了好几篇关于它的文章和答案,但对我来说仍然没有什么意义。我认为对我来说,正确理解它的最好方法是在JS原型和C++/Java类之间进行某种比较 所以我的最后一个问题是: 来自Java/C++背景,我需要知道什么才能在代码中有效地使用原型理解Javascript';s原型来自Java和C++;背景 我的编程背景主要是爪哇、C++和C语言。我最近开始接触Javascript和web开发,我基本掌握了如何使用Javascript和JQuery操作DOM元素以及前端所需的任何其他操作,java,javascript,c++,class,prototype,Java,Javascript,C++,Class,Prototype,然而,我似乎无法理解的是JS中的原型设计。我已经读了好几篇关于它的文章和答案,但对我来说仍然没有什么意义。我认为对我来说,正确理解它的最好方法是在JS原型和C++/Java类之间进行某种比较 所以我的最后一个问题是: 来自Java/C++背景,我需要知道什么才能在代码中有效地使用原型 旁注:像这样的问题会讨论两者之间的哲学差异。我真正希望的是如何用一个原型来解释如何用一个已经理解C++中的类的人来编写程序。 < P>我来自一个与你相似的背景,我在JavaScript中已经做了很多年,直到我终于
旁注:像这样的问题会讨论两者之间的哲学差异。我真正希望的是如何用一个原型来解释如何用一个已经理解C++中的类的人来编写程序。 < P>我来自一个与你相似的背景,我在JavaScript中已经做了很多年,直到我终于明白了这一点。如果您的问题是“如何编写干净的Javascript类并避免因对工作方式的误解而污染代码库”,那么我是如何做到的: 我所做的实际上是研究该语言所使用的Javascript。CoffeeScript允许您以类似于基于类的系统(如Java)而不是基于原型的系统(如Javascript)的方式编写OO代码。然后它编译成(相对)干净的Javascript,这样您就可以看到这些代码是如何直接实现的 如果您查看Coffeescript主页,然后向下滚动到类、继承和超级部分,您将看到一个窗口,其中显示Coffeescript类和生成的Javascript实现(您可以通过单击底部的加载按钮对其进行实时编辑和播放)。当我以本机方式编写Javascript类时,我现在通常会模仿这种风格。还有其他方法……基于原型的系统天生就更灵活……但这种方法似乎安全,并保持我的名称空间相对干净(这是Java文化固有的一部分,但不是Javascript语言的默认设置) 该页面上的Coffeescript示例有点忙,因为它实现了一个类继承权,这是Javascript本机不支持的。如果删除Coffeescript窗格中的所有“继承”和“超级”内容,您将看到更干净的Javascript结果。当然,那么一切都是从“对象”继承的。原型,以及为什么它们很棒。 在我开始之前,Mozilla可以比我更好地编写本指南: <>强>就像你我也有传统的OO语言的背景,我第一次学习的编程语言是C++,我认为它是最棒的。在很多方面,C++是一种奇妙的语言,这就是为什么它被编码在其中。 然而,区别在于JavaScript的工作方式。C++是严格类型化的,类必须包含它们包含的确切数据类型:
class Rectangle {
int width, height;
public:
void set_values (int,int);
int area() {return width*height;}
};
与C++不同,JavaScript中的几乎所有东西都是
因为JavaScript是动态编译的,所以它非常灵活。我们可以随时扩展现有对象,而不是像var derek = "Derek Howard";
derek.age = 16;
对象那样的僵硬骨架
原型
对象发挥作用的地方
如何用Javascript创建“类”?
我将用JavaScript重新创建上面的矩形对象以进行演示
第一步是创建一个定义类名的函数
。这应该大写,表示它是一个“类”
第一个函数(大写)是构造函数。您应该使用它将基本初始值传递给对象
function Rectangle(width, height) {
this.width = width || 1;
this.height = height || 1;
}
|
操作符使它成为这样,如果开发人员没有将值传递给构造函数,它仍然具有默认值
然后,要向“类”添加函数,您需要在原型上创建函数
Rectangle.prototype.area = function () {
return this.width * this.height;
}
你已经完成了类的创建!现在使用你的类。
使用类实际上与C++非常类似。您只需创建一个对象并使用
new
关键字:
var bigRec = new Rectangle(42, 100);
然后,您可以直接在新对象上调用在Rectangle.prototype
上创建的函数:
alert(bigRec.area());
完整代码(JSFiddle:)
得到并得到。基本上,它们就像JS的《圣经》。你需要知道的一切都在那里。你可能不需要运行编译器来生成代码。在学习.net时,我第一次学习Java是因为(formaly SUN)Java网站上对OOP的解释很棒。最近,我更深入地研究了如何在JavaScript中实现这一点,并写下了这样的答案:希望它能帮助你。哇,这正是我想要的。它为我提供了一个基本理解的框架,并使我能够很容易地构建它。再次感谢!
//new class
function Rectangle(width, height) {
//class properties
this.width = width || 1;
this.height = height || 1;
}
//class functions
Rectangle.prototype.area = function () {
return this.width * this.height;
}
//create a new Rectangle object
var bigRec = new Rectangle(42, 100);
//call functions created from the prototype
alert(bigRec.area());