我有一个简单的实用功能:
public static function extend(objA:Object, objB:Object):Object {
objA = objA || {};
for(var prop:String in objB) {
if(typeof(objB[prop]) === "object") {
objA[prop] = extend(objA[prop], objB[prop]);
} else {
objA[prop] = objB[prop];
}
}
return objA;
}
我目前正在使用它:
object1 = {prop1: "asd", prop2: {subProp1: 120, subProp2: 360}};
object2 = {prop1: "asd", prop2: {subProp1: 120, subProp2: 5, subProp3: 6}};
object1 = extend(object1, object2);
//object1 now looks like (subProp2 overwritten, subProp3 added):
//{prop1: "asd", prop2: {subProp1: 120, subProp2: 5, subProp3: 6}};
我想像这样使用它:
object1 = {prop1: "asd", prop2: {subProp1: 120, subProp2: 360}};
object2 = {prop1: "asd", prop2: {subProp1: 120, subProp2: 5, subProp3: 6}};
object1.extend(object2);
很多资源都说AS原型设计不再是一个好主意。那么在AS3中实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
也许这会对你有所帮助: http://tobyho.com/2009/05/02/modifying-core-types-in/
但我建议您在AS3中避免使用该代码样式。这是你的代码:
Object.prototype.extend = function(objB:Object):Object {
var objA:Object = this || {};
for(var prop:String in objB) {
if(typeof(objB[prop]) === "object") {
objA[prop].extend(objB[prop]);
} else {
objA[prop] = objB[prop];
}
}
return objA;
}
答案 1 :(得分:0)
原型的问题在于它们正在向现有的“类”添加行为。
为什么那么糟糕?
Object
添加功能
类。阅读代码真是太可怕了,因为在某些时候会有代码
对Object的方法调用对你来说是全新的。extend
上的Object
,它会与您发生冲突。您的问题没有明确答案,因为您的示例过于通用。通常,您不希望将此功能添加到所有对象,因为并非所有对象都需要它。而且您只想添加/覆盖某些属性。