87,901
社区成员
发帖
与我相关
我的任务
分享
var color = "red";
var o = { color: "blue"};
var m = {
a: 1,
b: function() {
alert(this.color);
}
};
var x= m.b
x()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
/*
你的问题涉及到:1. 函数也是对象,是值的一种类型;2. 函数与方法;3. this
在JavaScript中, 函数不仅是一种语法, 也是值,
即, 可以将函数赋值给变量, 存储在对象的属性或数组的元素中,
作为参数传入给另外一个函数
函数定义
function square(x) {
return x * x;
}
这个定义创建一个新的函数对象, 并将其赋值给变量square.
函数的名字实际上是看不见的, 它(square)仅仅是变量的名字,
这个变量指代函数对象.
函数还可以赋值给其他的变量, 并且仍可以正常工作
赋值给变量
function square(x) {
return x * x;
}
var s = square;
square(4); // => 16
s(4); // => 16
赋值给对象的属性
当函数作为对象的属性调用时,
函数就称为方法.
var o = {square: square}; // 对象直接量
o.square(4); // => 16
赋值给数组的元素
var a = [square, 4]; // 数组直接量
a[0]( a[1] ); // => 16
*/
/*
至于 this 的问题,网上有更详细的解释,我就说两点吧。
1. 函数里的 this 指向全局对象window:
var x = 10;
function f () {
console.info( this.x );
}
f(); //=> 10
我们定义的全局变量、函数都可以通过 window.x 、 window.f() 的方式引用,
此时this代表的是window对象。(ES5的严格模式函数里的this为undefined)
2. 方法里的 this 指向调用它的对象
var o = { x: 20 };
var x = 10;
o.m = function () {
console.info( this.x );
};
o.m(); //=> 20
*/
</script>
</body>
</html>
o.c = m.b
和o.c = function() {
alert(this.color);
}
并没有什么区别