blob: 98e2f26674e0a7bb830266384fae29e7142544bf [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2013 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28var extend = function (d, b) {
29 function __() { this.constructor = d; }
30 __.prototype = b.prototype;
31 d.prototype = new __();
32};
33
34var Car = (function (Super) {
35 var Car = function () {
36 var self = this;
37
38 Super.call(self);
39
40 Object.defineProperties(self, {
41 "make": {
42 enumerable: true,
43 configurable: true,
44 get: function () {
45 return "Ford";
46 }
47 }
48 });
49
50 self.copy = function () {
51 throw new Error("Meant to be overriden");
52 };
53
54 return self;
55 };
56
57 extend(Car, Super);
58
59 return Car;
60}(Object));
61
62
63var SuperCar = ((function (Super) {
64 var SuperCar = function (make) {
65 var self = this;
66
67 Super.call(self);
68
69
70 Object.defineProperties(self, {
71 "make": {
72 enumerable: true,
73 configurable: true,
74 get: function () {
75 return make;
76 }
77 }
78 });
79
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000080 // Convert self.copy from DATA_CONSTANT to DATA.
Ben Murdochb8a8cc12014-11-26 15:28:44 +000081 self.copy = function () { };
82
83 return self;
84 };
85 extend(SuperCar, Super);
86 return SuperCar;
87})(Car));
88
89assertEquals("Ford", new Car().make);
90assertEquals("Bugatti", new SuperCar("Bugatti").make);
91assertEquals("Lambo", new SuperCar("Lambo").make);
92assertEquals("Shelby", new SuperCar("Shelby").make);