创建一个新的JavaScript类说我有以下代码:动态地从现有对象
var album = new MyObject('album');
假设对象被构造时,一串相对于仅相册属性都通过AJAX加载。是否有可能创建一个Album
类,以便在以后,我可能只是这样做:
var anotherAlbum = new Album();
的Album
构造会自动将基于什么时候装特有的专辑对象的属性,创建MyObject('album')
创建一个新的JavaScript类说我有以下代码:动态地从现有对象
var album = new MyObject('album');
假设对象被构造时,一串相对于仅相册属性都通过AJAX加载。是否有可能创建一个Album
类,以便在以后,我可能只是这样做:
var anotherAlbum = new Album();
的Album
构造会自动将基于什么时候装特有的专辑对象的属性,创建MyObject('album')
可以动态创建JavaScript“类”,就像任何其他对象一样。所以,是的,这可以做到。
你会做的代码处理Ajax响应是这样的(假设AJAX响应提供了新的“类”的名称,这是在一个名为newClassName变量):
window[newClassName] = function() {
// New class name constructor code
}
window[newClassName].prototype = {
someProperty: "someValue",
someMethod: function(a, b) {
},
someOtherMethod: function(x) {
}
}
这实际上是JavaScript所具有的唯一继承。 JavaScript有prototypal inheritance(可用于重新创建经典继承)。这意味着继承来自另一个对象,而不是类定义。
要创建具有另一个对象的所有属性的对象很简单:
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!";
};
然后mySecondObject
当然会说你℃具myObject
的所有属性reation。
请注意,这是一个简单的版本,并且这会将所有属性“公开”。如果你需要一些隐私,可以通过添加一些功能来实现。这有点复杂,所以让我知道你是否感兴趣...
你可以使用Douglas Crockford的功能继承模式。来自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'});
它使用函数来装饰现有的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();
我不明白这是如何回答这个5岁的问题。 – 2015-06-29 06:01:54
我的主要问题是,你如何创建“相册”对象,使之能在应用程序的任何一点被调用 – 2010-02-26 15:19:09