Array.forEach è già definito dalla JSL se non presente (ed in modo più standard se non ricordo male)

quindi credo che il codice potrebbe essere così
codice:
Function.prototype.forEach = function(object, block, context) {
	for (var key in object) {
		if (!this.prototype[key])
			block.call(context, object[key], key, object);
	}
};
function forEach(object, block, context) {
	if (object) {
		var resolve = Function;
		if(!object.constructor == Function) {
			if (object.forEach.constructor == Function) {
				object.forEach(block, context);
				return;
			}
			else if (typeof(object.length) == "number")
				resolve = Array;
		}
		resolve.forEach(object, block, context);
	}
};
resta il mio dubbio sull'utilità di queste implementazioni ... 20 linee di codice invece di scrivere un solo if(key !== "toSource") ... che se si usa la JSL diventa quasi obbligatorio (meglio ancora if(!$JSL.has(key)))

Ma a conti fatti, io tutti questi script, implementazioni di JSON o serializzatori a parte, che lavorano su tutti i metodi o funzioni a prescindere da quali siano non ne ho visti.

insomma, se si fa un for in rartamente si useranno le funzioni dell'oggetto ... al massimo i parametri, e l'unico rischio è sovrascrivere quello del toSource che se non serve, chissenefrega.

Vorrei vedere altre applicazionidiverse da JSON o simili che fanno for in "a vanvera" su oggetti "a vanvera" perchè più ci penso più non ricordo, se non per la PHP_Serializer dove comunque le funzioni vengono tralasciate, per quale occasione mi sia servito non avere una sola proto di funzione.

Insomma, odio il codice intrusivo, quindi non posso darti torto per l'Object.prototype, ma se il metodo non serve e la proto è una sola e standard, come è la toSource, basta scrivere

delete Object.prototype.toSource

a inizio script, quindi anche con la JSL il problema non sussiste, sussiste solo se si ha necessità di sfruttare Object.toSource ma si parsano oggetti "a vanvera"