1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
import QtQml
QtObject {
property string myErrorName: {
var e = new Error;
try {
e.name = "MyError1";
} finally {
return e.name;
}
}
property string errorName: {
var e = new Error;
try {
Error.prototype.name = "MyError2";
} finally {
return e.name
}
}
property int mathMax: {
// Cannot change methods of builtins
try {
Math.max = function(a, b) { return 10 };
} finally {
return Math.max(3, 4)
}
}
property int extendGlobal: {
// Can add new methods to globals
try {
Array.prototype.myMethod = function() { return 32 }
} finally {
return (new Array).myMethod()
}
}
property string prototypeTrick: {
// Cannot change prototypes of locked objects
try {
SyntaxError.prototype.setPrototypeOf({
toLocaleString : function() { return "not a SyntaxError"}
});
} finally {
return (new SyntaxError).toLocaleString();
}
}
property string shadowMethod1: {
// Can override Object.prototype methods meant to be changed
try {
TypeError.prototype.toLocaleString = function() { return "not a TypeError"};
} finally {
return (new TypeError).toLocaleString();
}
}
property bool shadowMethod2: {
// Cannot override Object.prototype methods not meant to be changed
try {
TypeError.prototype.hasOwnProperty = function() { return true };
} finally {
return (new TypeError).hasOwnProperty("foobar");
}
}
property string changeObjectProto1: {
// Can change Object.prototype methods meant to be changed
try {
Object.prototype.toLocaleString = function() { return "not an Object"};
} finally {
return (new Object).toLocaleString();
}
}
property bool changeObjectProto2: {
// Cannot change Object.prototype methods not meant to be changed
try {
Object.prototype.hasOwnProperty = function() { return true };
} finally {
return (new Object).hasOwnProperty("foobar");
}
}
property string defineProperty1: {
// Can define a property that shadows an existing one meant to be changed
try {
Object.defineProperty(URIError.prototype, "toLocaleString", {
value: function() { return "not a URIError" }
})
} finally {
return (new URIError).toLocaleString();
}
}
property bool defineProperty2: {
// Cannot define a property that shadows an existing one not meant to be changed
try {
Object.defineProperty(URIError.prototype, "hasOwnProperty", {
value: function() { return true }
})
} finally {
return (new URIError).hasOwnProperty("foobar");
}
}
}
|