1// 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 80 // Convert self.copy from DATA_CONSTANT to DATA. 81 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); 93