109 lines
3.0 KiB
QML
109 lines
3.0 KiB
QML
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");
|
|
}
|
|
}
|
|
}
|