从现有对象动态创建新的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();