Tôi có một số lớp thử nghiệmLàm thế nào để thiết lập tên lớp cho đối tượng 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)
Tôi có đối tượng trống mới
y = {}
y instanceof Object
Tôi có thể tìm thấy bất kỳ cách để thiết lập bất kỳ thuộc tính cho y, một cái gì đó như thế này
y.__proto__ = x.__proto__
y.constructor.prototype = x.constructor.prototype
để có kết quả này
y instanceof TestKlass => true
======================== ========
UPD:
So. Mục đích chính của tôi - đó là tạo ra hàm CLONE. Bây giờ giải pháp của tôi làm việc cho tôi. Hãy nhìn vào mã này:
Javascript JS đối tượng bản sao
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 đối tượng bản sao
# 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
Bây giờ bạn có thể thử để làm điều đó
A = new TestKlass
B = Object._clone(A)
B instanceof TestKlass => true
Đó là công việc tốt với Moz FF 13. Nhưng tôi nghĩ nó không phải là trình duyệt chéo. và proto không còn được dùng nữa.
Tôi nghĩ rằng không có giải pháp phổ quát. Nhưng có lẽ Nó sẽ hữu ích cho ai đó.
'y.constructor = x.constructor'? Chỉ cần đoán ... Thực sự, tuy nhiên, bạn không nên quan tâm đến các loại. Ý tôi là, nếu có một cách dễ dàng để giả mạo chúng, chúng có gì tốt? – cHao
Câu trả lời có cung cấp cho bạn đủ thông tin không? Nếu vậy, bạn có thể chấp nhận câu trả lời không? :-) –
Tôi chỉ đang tìm giải pháp tốt nhất. Tôi sẽ đánh dấu câu trả lời hay nhất sau khi tìm hiểu sâu trang này http://javascript.ru/tutorial/object/inheritance (tiếng Nga) –