diff --git a/js-oop.js b/js-oop.js index 954f95b..d3f2f60 100755 --- a/js-oop.js +++ b/js-oop.js @@ -172,6 +172,30 @@ var a = new A() +// The above aproach has one rather big flaw -- if called without new +// it will modify the root contect (i.e. window or global) +// A safer way to define a constructor: + + function A(){ + return { + __proto__: A.prototype, + x: 1, + y: 2, + } + } + + var a = new A() + var a = A() + + // XXX a way to check if we are running in a new context... + function A(){ + var obj = this instanceof A ? + this + : { __proto__: A.prototype } + obj.x = 1 + obj.y = 2 + return obj + } // Some terminology: // - in the above use-case 'A' is called a constructor, diff --git a/js-types-n-oop.js b/js-types-n-oop.js new file mode 100644 index 0000000..5e1230e --- /dev/null +++ b/js-types-n-oop.js @@ -0,0 +1,81 @@ + +/********************************************************************** +* +* JavaScript types and objects +* +* +**********************************************************************/ + + +// Basic values +// ============ +// +// numbers + var integer = 123 + var floating_point = 3.1415 + var hex = 0xFF + +// strings + var string = 'string' + var another_string = "also a string" + var template = ` + a template string. + this can include \\n's + also summorts expansions ${ '.' }` + +// boolieans + var t = true + var f = false + +// nulls + var n = null + var u = undefined + var not_a_number = NaN + + + +// Values are in general: +// +// - singletons + var a = 3.14 + var b = 3.14 + a === b // -> true + + // In general equal basic values are the same value and there is + // no way to create two copies of the same value. + + +// - imutable + var a = 1 + var b = a + + // a and b hold the same value (1) + a === b // -> true + + // now we update a... + a += 1 + a === b // -> false + // Note that we updated the value referenced by a, i.e. the old + // value (1) was not modified by the addition (b is still 1), + // rather a new value (2) was created and assigned to a. + + + +// Objects +// ======= +// +// + +// Prototypes and inheritance +// -------------------------- +// +// + +// Constructors +// ------------ +// +// + + +/********************************************************************** +* vim:set ts=4 sw=4 : */