HTML and CSS Reference
In-Depth Information
Because Object.defineProperties and, by extension, Object.
defineProperty cannot be fully simulated in ES3 environments, this is not
usable, but it shows how Object.create works. Also note that ES5 allows the
prototype to be null , which is not possible to emulate across browsers in ES3.
An interesting side-effect of using Object.create is that the instanceof
operator may no longer provide meaningful information, as the native Object.
create does not use a proxy constructor function to create the new object. The
only function of which the newly created object will be an instance is Object .
This may sound strange, but instanceof really isn't helpful in a world in which
objects inherit objects. Object.isPrototypeOf helps determine relationships
between objects, and in a language with duck typing such as JavaScript, an object's
capabilities are much more interesting than its heritage.
8.2.3 Getters and Setters
As stated in the previous section, Object.defineProperty cannot be reliably
emulated in ES3 implementations, because they do not expose property attributes.
Even so, Firefox, Safari, Chrome, and Opera all implement getters and setters,
which can be used to solve part of the defineProperty puzzle in ES3. Given
that it won't work in Internet Explorer until version 9 1 , getters and setters won't be
applicable to the general web for still some time.
Getters and setters make it possible to add logic to getting and setting properties,
without requiring change in client code. Listing 8.10 shows an example in which
our circle uses getters and setters to add a virtual diameter property.
Listing 8.10 Using getters and setters
"test property accessors": function () {
Object.defineProperty(circle, "diameter", {
get: function () {
return this.radius * 2;
},
set: function (diameter) {
if (isNaN(diameter)) {
throw new TypeError("Diameter should be a number");
}
this.radius = diameter / 2;
1. Internet Explorer 8 implements Object.defineProperty , but for some reason not for client
objects.
 
Search WWH ::




Custom Search