Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.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类_Javascript_Dynamic_Class - Fatal编程技术网

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

从现有对象动态创建新的javascript类,javascript,dynamic,class,Javascript,Dynamic,Class,假设我有以下代码: var album = new MyObject('album'); 假设在构建对象时,通过AJAX加载一组仅与相册相关的属性。是否可以创建一个相册类,以便以后我可以这样做: var anotherAlbum = new Album(); Album构造函数将根据创建MyObject(“Album”)时加载的内容自动设置Album对象特有的属性。JavaScript“类”,就像任何其他对象一样,可以动态创建。所以,是的,这是可以做到的 您可以在处理AJAX响应的代码中执行

假设我有以下代码:

var album = new MyObject('album');
假设在构建对象时,通过AJAX加载一组仅与相册相关的属性。是否可以创建一个
相册
类,以便以后我可以这样做:

var anotherAlbum = new Album();
Album
构造函数将根据创建
MyObject(“Album”)时加载的内容自动设置Album对象特有的属性。
JavaScript“类”,就像任何其他对象一样,可以动态创建。所以,是的,这是可以做到的

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


这实际上是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();

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

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

var myObject = {attr1: 'val1', attr2: 'val2'};
然后可以创建该对象的新实例:

var mySecondObject = Object.create(myObject);
现在您可以更改
mySecondObject
的属性,如果它有方法,您可以同样轻松地重载它们:

mySecondObject.attr1 = "Hello";

mySecondObject.attr2 = function() {
                           return "World!";
                       };
然后,
mysecondbject
当然将拥有您在创建时提供的所有属性


请注意,这是一个简单的版本,所有属性都保留为“public”。如果您需要一些隐私,可以通过在混合中添加一些功能来实现。不过这有点复杂,所以如果您有兴趣请告诉我……

您可以使用道格拉斯·克罗克福德的函数继承模式。Javascript好书中的代码

var mammal = function (spec) {
    var that = {};

    that.get_name = function (  ) {
        return spec.name;
    };

    that.says = function (  ) {
        return spec.saying || '';
    };

    return that;
};

var myMammal = mammal({name: 'Herb'});


var cat = function (spec) {
    spec.saying = spec.saying || 'meow';
    var that = mammal(spec);
    that.purr = function (n) {
        var i, s = '';
        for (i = 0; i < n; i += 1) {
            if (s) {
                s += '-';
            }
            s += 'r';
        }
        return s;
    };
    that.get_name = function (  ) {
        return that.says(  ) + ' ' + spec.name +
                ' ' + that.says(  );
    return that;
};

var myCat = cat({name: 'Henrietta'});
var哺乳动物=功能(规范){
var,它={};
that.get_name=函数(){
返回规格名称;
};
that.says=函数(){
返回规格,说明为| |“”;
};
归还;
};
var mydemal=哺乳动物({name:'Herb'});
var cat=功能(规格){
spec.saying=spec.saying | | |喵|;
var=哺乳动物(spec);
that.purr=函数(n){
变量i,s=“”;
对于(i=0;i
它使用函数用新函数和属性装饰现有的javascript对象。这样,您可以在现有对象中动态添加新函数和属性

var NewClass=function(){
    this.id=null;
    this.name=null;
    this.show=function(){
        alert(this.id+" "+this.name;
    }
}
NewClass.prototype.clear=function(){
    this.id=null;
    this.name=null;
};

...

var ins1=new NewClass();
var ins2=new NewClass();

我的主要问题是,如何创建“Album”对象,以便在应用程序中的任何时候都可以调用它?我不知道这是如何回答5年前的问题的。
var NewClass=function(){
    this.id=null;
    this.name=null;
    this.show=function(){
        alert(this.id+" "+this.name;
    }
}
NewClass.prototype.clear=function(){
    this.id=null;
    this.name=null;
};

...

var ins1=new NewClass();
var ins2=new NewClass();