我有一個使用JSON定義的現有對象的數組。這些對象顯然是對象類型。如何將它們與自定義對象類型相關聯以賦予它們特定的功能?使用JavaScript更改對象的類型
回答
那將在所有瀏覽器的工作方式是,要麼增加每個項目你想要的屬性和方法在陣列中,或者對象傳遞給一個構造函數和創建基於舊的對象的新對象屬性和方法。
或者,如果你不關心IE:
var obj = {
name : "Jeremy"
};
function CustomType() {
this.name = this.name || "someValue";
this.greeting = "Hi";
}
CustomType.prototype.sayHi = function() {
alert(this.greeting + ", " + this.name);
};
obj.__proto__ = CustomType.prototype;
obj.constructor.call(obj);
obj.sayHi();
我確實在乎IE,並且隨着你的建議去創建一個方法來修改傳入的對象並將它返回給調用者。我習慣於在Perl中使用「祝福」並能夠隨時修改對象。 – Ray 2010-07-06 14:06:14
我不認爲有任何方法可以在創建對象後改變其類型。幸運的是,您可能實際上並不需要更改對象的類別 - 您可能會滿意於爲對象提供一些新的方法和其他功能。 (唯一真正的區別是如果您更改班級會發生什麼情況,並且大多數人在代碼運行時不會更改班級。)
我會爲您工作一個示例。首先,我將創建一個簡單的對象來表示你擁有的JSON對象:
var myobj = new Object()
myobj.name = "Fred"
然後,我會創建一些類,您希望能夠分配到myobj
:
function Speaker() {
this.speak = function() {
window.alert("Hello, " + this.name);
}
}
這新Speaker
類有一些有用的功能:它可以使用的方法speak()
輸出有用的信息:
var s = new Speaker()
s.name = "Sally"
s.speak()
執行該的m e留言「你好,莎莉」。不幸的是,您不希望使用此功能的新對象(如s
),您希望現有對象(myobj
)擁有它。這裏是你如何做到這一點:
myobj.speak = s.speak
現在,當我執行此:
myobj.speak()
我看到 「你好,弗雷德」 的消息。
總結:創建一個對象,做你想做的。將所有方法(以及任何助手變量)複製到新對象中。除了繼承的一些不尋常的用途,這將使你的新對象按照需要行事。
如果你想使用它們的特定方法,你可以使用apply/call。
或者您可以複製您的自定義對象的方法。
function Object1() {
this.aValue = "10";
}
function CustomObject() {
this.customValue = "6";
}
function convertToCustom(obj) {
var custom = new CustomObject();
for(var key in obj) {
custom[key] = obj[key];
}
return custom;
}
var obj = new Object1();
var custom = convertToCustom(obj);
console.log(custom.customValue); // <- 6
console.log(custom.aValue); // <- 10
爲補充傑里米的答案,你可以使用的Object.create,而不是與原直接播放。你還需要一個「擴展」功能。
因此,鑑於傑里米的例子,你可以有這樣的事情:
var obj = {
name : "Jeremy"
};
function CustomType() {
}
CustomType.prototype.init = function(){
this.name = this.name || "someValue";
this.greeting = "Hi";
return this; //let's make it fluent
}
CustomType.prototype.sayHi = function() {
console.log(this.greeting + ", " + this.name);
};
function extend(obj, props) {
for(prop in props) {
if(props.hasOwnProperty(prop)) {
obj[prop] = props[prop];
}
}
return obj; //let's make it fluent
}
obj = extend(Object.create(CustomType.prototype), obj).init();
obj.sayHi();
如果您不需要構造函數,你可以做:
Object.assign(new CustomType, {});
- 1. 如何更改Javascript對象的類型?
- 2. 更改對象類型
- 3. 對象類型更改
- 4. 使用Javascript更改標記的類型
- 5. 對象類型 - 使用Javascript(ExtJS的)
- 6. 更改用JavaScript Image對象
- 7. 更改JavaScript對象
- 8. Javascript對象類型
- 9. 使用javascript更改輸入類型
- 10. 使用JavaScript更改css類模型
- 11. 使用JavaScript對象更改element.style
- 12. 如何使用Javascript更改JSON對象
- 13. 引用類型和對象類型更改Java
- 14. 如何使用Google Mock更改指定對象的類型?
- 15. 如何使用aws cli更改對象的內容類型?
- 16. 在oracle中更改對象類型
- 17. 類型使用C中的「類型」對象投射對象#
- 18. Javascript:更改日期對象
- 19. C# - 如何更改對象的類型,然後使用類的方法?
- 20. Javascript:屬性/對象類型
- 21. 用原型更改現有的JavaScript對象函數?
- 22. 改變「類型」 Python對象
- 23. 一個對象的密鑰值上的其他類似類型的對象的更新改變的JavaScript
- 24. 如何修改對象類型中的屬性以更改其數據類型?
- 25. 更改D型recarray列的對象類型
- 26. 更改調用對象中響應的類型
- 27. 用Javascript更改所選對象
- 28. javascript中的值類型引用類型對象
- 29. JavaScript:修改對象變量的原型?
- 30. 使用複選框使用javascript更改對象可見性?
該對象是否具有附加屬性/方法,你還需要什麼?你能提供一些例子嗎? – mykhal 2010-07-02 16:29:54
..我的意思是,你有這樣的自定義對象類型已經定義,或者你想知道如何做到這一點? – mykhal 2010-07-02 16:38:55