从现有对象动态创建新的javascript类

jd.*_*jd. 8 javascript class dynamic

说我有以下代码:

var album = new MyObject('album');
Run Code Online (Sandbox Code Playgroud)

假设在构造对象时,通过AJAX加载一组仅与专辑相关的属性.是否可以创建一个Album类,以便稍后我可以这样做:

var anotherAlbum = new Album();
Run Code Online (Sandbox Code Playgroud)

Album构造函数将自动设置特有的专辑对象的属性,立足于打造什么时候加载MyObject('album')

Adr*_*idt 9

JavaScript是原型的,而不是经典的,所以如果你从类的角度思考,那你就错了.

您根本不必使用new操作员.您可以使用对象文字创建新对象:

var myObject = {attr1: 'val1', attr2: 'val2'};
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建该对象的新实例:

var mySecondObject = Object.create(myObject);
Run Code Online (Sandbox Code Playgroud)

现在您可以更改其属性mySecondObject,如果有方法,您可以轻松地重载它们:

mySecondObject.attr1 = "Hello";

mySecondObject.attr2 = function() {
                           return "World!";
                       };
Run Code Online (Sandbox Code Playgroud)

然后mySecondObject当然会拥有你myObject在创作时提供的所有属性.

请注意,这是一个简单版本,这使所有属性都"公开".如果您需要一些隐私,可以通过添加一些功能来实现.虽然它有点复杂,但如果你有兴趣,请告诉我......


noa*_*oah 7

这实际上是 JavaScript 拥有的唯一继承形式。JavaScript 具有原型继承(可用于重新创建经典继承)。这意味着继承是来自另一个对象,而不是类定义。

创建一个具有另一个对象的所有属性的对象很简单:

function Album() {
   // do whatever initialization you need to here, all the properties of album 
   // are available on 'this'
   // e.g.,
   doSomething(this.albumName);
}
Album.prototype = album;

var anotherAlbum = new Album();
Run Code Online (Sandbox Code Playgroud)


jhu*_*man 5

JavaScript“类”,就像任何其他对象一样,可以动态创建。所以,是的,这是可以做到的。

您将在处理 AJAX 响应的代码中执行类似的操作(假设 AJAX 响应提供新“类”的名称,并且它位于名为 newClassName 的变量中):

window[newClassName] = function() {
  // New class name constructor code
}

window[newClassName].prototype = {

  someProperty: "someValue",

  someMethod: function(a, b) {
  },

  someOtherMethod: function(x) {
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我的主要问题是,如何创建“相册”对象,以便可以在应用程序中的任何位置调用它 (2认同)