創建一個新的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