var length = 10function fn() { console.log(this.length)}var obj = { length: 5, method: function (fn) { fn() arguments[0]() },}obj.method(fn, 1)
10
2
9
var a = 1function printA() { console.log(this.a)}var obj = { a: 2, foo: printA, bar: function () { printA() },}obj.foo()obj.bar()var foo = obj.foofoo()
2
1
1
10
var x = 3var y = 4var obj = { x: 1, y: 6, getX: function () { var x = 5 return (function () { return this.x })() }, getY: function () { var y = 7 return this.y },}console.log(obj.getX())console.log(obj.getY())
3
6
11
var a = 10var obt = { a: 20, fn: function () { var a = 30 console.log(this.a) },}obt.fn()obt.fn.call()obt.fn()
20
10
20
12
function a(xx) { this.x = xx return this}var x = a(5)var y = a(6)console.log(x.x)console.log(y.x)
undefined
6
13
function foo(something) { this.a = something}var obj1 = { foo: foo,}var obj2 = {}obj1.foo(2)console.log(obj1.a)obj1.foo.call(obj2, 3)console.log(obj2.a)var bar = new obj1.foo(4)console.log(obj1.a)console.log(bar.a)
2
3
2
4
14
function foo(something) { this.a = something}var obj1 = {}var bar = foo.bind(obj1)bar(2)console.log(obj1.a)var baz = new bar(3)console.log(obj1.a)console.log(baz.a)