我有一些測試類如何爲JavaScript對象
TestKlass = (function() {
function TestKlass(value) {
this.value = value != null ? value : 'hello world';
console.log(this.value);
}
return TestKlass;
})();
x = new TestKlass;
x instanceof TestKlass; (gives true)
我有新的空對象
y = {}
y instanceof Object
我能找到任何方式爲Ÿ設置任何屬性的東西設置的類名像這樣
y.__proto__ = x.__proto__
y.constructor.prototype = x.constructor.prototype
爲了得到這個結果
y instanceof TestKlass => true
============================================ ========
UPD:
所以。我的主要目標 - 創建CLONE功能。現在我的解決方案適用於我。請看看這個代碼:
JavaScript的JS對象克隆
Object._clone = function(obj) {
var clone, property, value;
if (!obj || typeof obj !== 'object') {
return obj;
}
clone = typeof obj.pop === 'function' ? [] : {};
clone.__proto__ = obj.__proto__;
for (property in obj) {
if (obj.hasOwnProperty(property)) {
value = obj.property;
if (value && typeof value === 'object') {
clone[property] = Object._clone(value);
} else {
clone[property] = obj[property];
}
}
}
return clone;
};
CoffeeScript的JS對象克隆
# Object clone
Object._clone = (obj) ->
return obj if not obj or typeof(obj) isnt 'object'
clone = if typeof(obj.pop) is 'function' then [] else {}
# deprecated, but need for instanceof method
clone.__proto__ = obj.__proto__
for property of obj
if obj.hasOwnProperty property
# clone properties
value = obj.property
if value and typeof(value) is 'object'
clone[property] = Object._clone(value)
else
clone[property] = obj[property]
clone
現在你可以嘗試這樣做,
A = new TestKlass
B = Object._clone(A)
B instanceof TestKlass => true
它的做工精細用Moz FF 13.但我認爲這不是跨瀏覽器。和proto已棄用。
我認爲沒有通用的解決方案。但也許這對別人會有幫助。
'y.constructor = x.constructor'?只是猜測......但是,真的,你不應該關心類型。我的意思是,如果有一個簡單的方法來僞造他們,他們有什麼好處呢? – cHao
答案能否爲您提供足夠的信息?如果是這樣,你能否接受答案? :-) –
我只是尋找最佳解決方案。深入學習這個頁面後,我將標記最佳答案http://javascript.ru/tutorial/object/inheritance(俄語) –