Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Javascript';s原型来自Java和C++;背景 我的编程背景主要是爪哇、C++和C语言。我最近开始接触Javascript和web开发,我基本掌握了如何使用Javascript和JQuery操作DOM元素以及前端所需的任何其他操作_Java_Javascript_C++_Class_Prototype - Fatal编程技术网

理解Javascript';s原型来自Java和C++;背景 我的编程背景主要是爪哇、C++和C语言。我最近开始接触Javascript和web开发,我基本掌握了如何使用Javascript和JQuery操作DOM元素以及前端所需的任何其他操作

理解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中已经做了很多年,直到我终于

然而,我似乎无法理解的是JS中的原型设计。我已经读了好几篇关于它的文章和答案,但对我来说仍然没有什么意义。我认为对我来说,正确理解它的最好方法是在JS原型和C++/Java类之间进行某种比较

所以我的最后一个问题是: 来自Java/C++背景,我需要知道什么才能在代码中有效地使用原型



旁注:像这样的问题会讨论两者之间的哲学差异。我真正希望的是如何用一个原型来解释如何用一个已经理解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中的几乎所有东西都是对象< /代码>,并且容易用点符号< /P>扩展。

var derek = "Derek Howard";
derek.age = 16;
因为JavaScript是动态编译的,所以它非常灵活。我们可以随时扩展现有对象,而不是像
对象那样的僵硬骨架

然而,在许多情况下,我们希望有一大堆看起来相同但有自己数据的对象(比如C++中的类)。这就是
原型
对象发挥作用的地方

如何用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());