OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 assertEquals(0, f.length); | 55 assertEquals(0, f.length); |
56 | 56 |
57 // Use a different bound object. | 57 // Use a different bound object. |
58 var obj = {x: 42, y: 43}; | 58 var obj = {x: 42, y: 43}; |
59 // Values that would normally be in "this" when calling f_bound_this. | 59 // Values that would normally be in "this" when calling f_bound_this. |
60 var x = 42; | 60 var x = 42; |
61 var y = 44; | 61 var y = 44; |
62 | 62 |
63 function f_bound_this(z) { | 63 function f_bound_this(z) { |
64 return z + this.y - this.x; | 64 return z + this.y - this.x; |
65 } | 65 } |
66 | 66 |
67 assertEquals(3, f_bound_this(1)) | 67 assertEquals(3, f_bound_this(1)) |
68 f = f_bound_this.bind(obj); | 68 f = f_bound_this.bind(obj); |
69 assertEquals(2, f(1)); | 69 assertEquals(2, f(1)); |
70 assertEquals(1, f.length); | 70 assertEquals(1, f.length); |
71 | 71 |
72 f = f_bound_this.bind(obj, 2); | 72 f = f_bound_this.bind(obj, 2); |
73 assertEquals(3, f()); | 73 assertEquals(3, f()); |
74 assertEquals(0, f.length); | 74 assertEquals(0, f.length); |
75 | 75 |
76 // Test chained binds. | 76 // Test chained binds. |
77 | 77 |
78 // When only giving the thisArg, any number of binds should have | 78 // When only giving the thisArg, any number of binds should have |
79 // the same effect. | 79 // the same effect. |
80 f = foo.bind(foo); | 80 f = foo.bind(foo); |
81 assertEquals(3, f(1, 1, 1)); | 81 assertEquals(3, f(1, 1, 1)); |
82 f = foo.bind(foo).bind(foo).bind(foo).bind(foo); | 82 f = foo.bind(foo).bind(foo).bind(foo).bind(foo); |
83 assertEquals(3, f(1, 1, 1)); | 83 assertEquals(3, f(1, 1, 1)); |
84 assertEquals(3, f.length); | 84 assertEquals(3, f.length); |
85 | 85 |
86 // Giving bound parameters should work at any place in the chain. | 86 // Giving bound parameters should work at any place in the chain. |
87 f = foo.bind(foo, 1).bind(foo).bind(foo).bind(foo); | 87 f = foo.bind(foo, 1).bind(foo).bind(foo).bind(foo); |
88 assertEquals(3, f(1, 1)); | 88 assertEquals(3, f(1, 1)); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 f = bar.bind(bar, 1).bind(bar, 2).bind(bar, 3); | 175 f = bar.bind(bar, 1).bind(bar, 2).bind(bar, 3); |
176 obj2 = new f(); | 176 obj2 = new f(); |
177 assertEquals(1, obj2.x); | 177 assertEquals(1, obj2.x); |
178 assertEquals(2, obj2.y); | 178 assertEquals(2, obj2.y); |
179 assertEquals(3, obj2.z); | 179 assertEquals(3, obj2.z); |
180 | 180 |
181 // Test instanceof obj2 is bar, not f. | 181 // Test instanceof obj2 is bar, not f. |
182 assertTrue(obj2 instanceof bar); | 182 assertTrue(obj2 instanceof bar); |
183 assertFalse(obj2 instanceof f); | 183 assertFalse(obj2 instanceof f); |
184 | |
OLD | NEW |