有几种方法获取的类似行为在javascript,最常见似乎是原型基于这样的:

function Vector(x, y, x) {
    this.x = x;
    this.y = y;
    this.z = z;
    return this;
}

Vector.prototype.length = function () { return Math.sqrt(this.x * this.x ... ); }

和封闭方法相似

function Vector(x, y, z) {
    this.length = function() { return Math.sqrt(x * x + ...); }
}

由于各种原因后者是更快,但我已经看到(我经常做的编写)的原型版本并且很好奇为什么其他人做的。

有帮助吗?

解决方案

分配的功能原型是更好的(公共的方法),因为所有类的实例将分享相同的复制的方法。如果分配的功能的内部构造作为在第二个例子中,每一次创建一个新的实例,构造创建一个新的复制的长度的功能,并将其分配给只是一个实例。

但是这后一种技术是非常有用的,如果你 每个复制有它自己的复制,主要使用的,正在做私人/权限的方法,其中有访问专声明的变量内部构造和继承通过封闭的机构。

道格拉斯Crockford有一个很好的 摘要.

其他提示

还有对象的文字的方法的原型:

var Vector = function(){};

Vector.prototype = {
  init:function(x,y,z) {
    this.x = x;
    this.y = y;
    this.z = z;
  },
  length:function() {
    return Math.sqrt(x * x + ...);
  }
};

var v1 = new Vector();
v1.init(1,2,3);

幸运的是我得到使用 prototype.js, ,它提供了一些很好的包装。所以你可以这样做:

var Person = Class.create({
    initialize: function(name) {
        this.name = name;
    },
    say: function(message) {
        return this.name + ': ' + message;
    }
});

Prototype.js 文件:定义类和继承

嗯,我真的没有一个专家意见这一点。我通常的最终使用的封锁基础的方法,只是因为它保留的代码的更简单的管理。但是,我们发现自己使用的原型的方法载的行代码。

你还有的选择:

function Vector(x, y, z) {
  function length() {
    return Math.sqrt(x * x + ...);
  }
}

这可能只是作为缓慢的,因为例子中的两个,但是它看起来更像Java/C#以及一位更加明确。

我是个大风扇使用 约翰Resig的图书馆 这一点。轻便、直接的,你已经知道如何使用它,如果你熟悉的'通常的'面向对象的风格。

有没有类javascript。

有的对象。你不需要一个类创造一个对象在javascript。它不会有constuctor功能,可以调用与新例如:

var james = new Person();

你可以模拟类似的行为:

原型的例子:

function Car (type) {
    this.type = type;
    this.color = "red";
}

Car.prototype.getInfo = function() {
    return this.color + ' ' + this.type + ' car';
};

目文字示例

var car = {
    type: "honda",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' car';
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top