Cheating JS
as Java developer, my intuition for JS sucks.
by David Gonzalez
HTML
<div id= "out">
</div>
JavaScript
function write(text){
document.getElementById("out").appendChild(document.createTextNode(text));
document.getElementById("out").appendChild(document.createElement("BR"));
}
function passByValue(value){
write("passByValue "+ value);
value = 20;
write("passByValue "+ value);
}
function passByValueObject(value){ // You are not in Java anymore
write("passByValueObject "+ value);
value = "20";
write("passByValueObject "+ value);
}
function passByReferenceProperty(ref){ // Welcome to JS pass by reference
write("passByReferenceProperty "+ ref.value);
ref.value = 20;
write("passByReferenceProperty "+ ref.value);
}
function passByValueObjectReference(ref){
write("passByValueObjectReference "+ ref.value.value);
ref.value = {value: "20"};
write("passByValueObjectReference "+ ref.value.value);
}
function passByReferenceObject(ref){
write("passByReferenceObject "+ ref.value.value);
ref.value.value= "20";
write("passByReferenceObject "+ ref.value.value);
}
function passByReferenceObjectProperty(object){
write("passByReferenceObjectProperty "+ object.value);
object.value = "20";
write("passByReferenceObjectProperty "+ object.value);
}
var value = 10;
var objectValue = "10";
var valueProperty = {value: 10};
var object = {value: "10"};
passByValue(value);
write("passByValue "+ value);
passByValueObject(value);
write("passByValueObject "+ objectValue);
passByReferenceProperty(valueProperty);
write("passByReferenceProperty "+ valueProperty.value);
passByValueObjectReference({ value: object});
write("passByValueObjectReference "+ object.value);
passByReferenceObject({ value: object});
write("passByReferenceObject "+ object.value);
object = {value: "10"};
var ref = { value: object};
passByReferenceObject(ref);
write("passByReferenceObject "+ ref.value.value + ". Catched update reference");
object = {value: "10"};
passByReferenceObjectProperty(object);
write("passByReferenceObjectProperty "+ object.value);