var obj ={a:l,b:function(){alert(this.a)}}; var fun =obj.b; fun( );
时间: 2024-10-18 21:20:11 浏览: 48
在这个代码示例中[^1]:
```javascript
var obj = {a: 'l', b: function() {alert(this.a)}};
var fun = obj.b;
// 调用fun时,由于fun内部的this指向的是它所在的作用域,即obj对象,
// 因此会弹出obj对象的a属性,而不是'l'本身,因为原始字符串'l'不是对象的属性。
fun(); // 弹出 "l"
```
当`fun()`被调用时,`this`关键字会绑定到`fun`变量定义时的上下文中,也就是`obj`对象,所以会显示`obj.a`的值,即'l'。
然而,如果你想要在函数外部改变`this`的行为,可以考虑使用箭头函数或者`call`, `apply`或`bind`方法来显式指定上下文[^2]:
```javascript
var obj = {a: 'l', b: function() {alert(this.a)}};
var fun = obj.b.bind(obj); // 或者使用箭头函数: var fun = obj.b = () => alert(this.a);
fun(); // 这次会弹出 "l",因为fun绑定了到obj对象上
```
相关问题
. 如下代码片段的运行结果是 var obj =(a:1,b:function 0 falert(this.a)f); var tun =obj.b; fund; 单选题2.0分 弹出a B 弹出1 弹出undefined D) 什么也看不到
代码片段会弹出 `undefined`。
首先,这段代码片段中的对象定义有语法错误,应该使用花括号 `{}` 包裹对象的属性值,例如:
```javascript
var obj = { a: 1, b: function() { alert(this.a); } };
```
接下来,在执行 `var fun = obj.b;` 时,将对象 `obj` 中的方法 `b` 赋值给了变量 `fun`。在这个过程中,方法 `b` 与对象 `obj` 的绑定关系丢失了。
最后,执行 `fun()` 时,方法 `b` 中的 `this` 指向全局对象 `window`,因此弹出的是 `this.a`,即 `window.a`,而全局对象中并没有定义属性 `a`,因此返回 `undefined`。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript"> var obj=new object(); obj.name="周润发"; obj.sex="男"; obj.age="20"; obj.fun=function () { alert("姓名:"+this.name+"性别:"+this.sex+"年龄:"+this.age); }; obj.fun(); </script> </head> <body> </body> </html> 这段代码有什么问题,为什么不能运行
这段代码有语法错误。在第4行应该是"new Object()"而不是"new object()";在第9行应该是"+"号连接字符串中间需要加上逗号或者加号,如下所示:
alert("姓名:" + this.name + "性别:" + this.sex + "年龄:" + this.age);
修正后的代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript">
var obj=new Object();
obj.name="周润发";
obj.sex="男";
obj.age="20";
obj.fun=function () {
alert("姓名:" + this.name + ",性别:" + this.sex + ",年龄:" + this.age);
};
obj.fun();
</script>
</head>
<body>
</body>
</html>
现在该代码可以正常运行。
阅读全文
相关推荐







