新手求教

改天换地 2015-08-21 09:09:26

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
var resultCon;
var name = 'window下的name<br/>';
function MyObj() {
var name = 'MyObj下的name<br/>';
this.doFunction = function () {
resultCon.innerHTML += this.name;
};
}
window.onload = function () {
resultCon = document.getElementById('result');
var obj = new MyObj();
obj.doFunction();//undefined
};
</script>
</head>
<body>
<div id="result">代码输出结果:<br /></div>
</body>
</html>
为什么会输出undefined啊 不是应该是MyObj下的name吗
...全文
121 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
misaka去年夏天 2015-08-21
  • 打赏
  • 举报
回复
resultCon.innerHTML += this.name; 这里的this指的是doFunction对象的name
cheery_an 2015-08-21
  • 打赏
  • 举报
回复

    function MyObj() {
            var name = 'MyObj下的name<br/>';
            this.doFunction = function () {
                resultCon.innerHTML += this.name;//这里的this是指的doFunction,而不是外面的MyObj,所以没定义
            };
        }
改天换地 2015-08-21
  • 打赏
  • 举报
回复
引用 7 楼 bbboy8205 的回复:
 <script type="text/javascript">
        var resultCon;
        var name1 = 'window下的name <br />'; // 1.此name 全局可用
        function MyObj() {
			var name3 = 'MyObj 下的私有 name<br />'; // 2.此name 为MyObj私有变量
			
			this.name = 'MyObj下的name<br />'; // 3. name 是myObj 的一个属性,可通过.来调用
            this.doFunction = function (name) {
				resultCon.innerHTML += name3; // 4.这里的name为MyObj私有变量
				resultCon.innerHTML += this.name; // MyObj下的name 
				
				this.name = name; // 重写
				resultCon.innerHTML += this.name; //  指针指向 此函数内部的name
            };
			
        }
        window.onload = function () {
			
            resultCon = document.getElementById('result');
			resultCon.innerHTML += name1; // 打印
            var obj = new MyObj();
            resultCon.innerHTML += obj.name; // 打印3
			obj.doFunction('88888');
        };
    </script>
    <div id="result">代码输出结果:<br /></div>
额真不好意思,我结贴完才看见您的回复,不好意思让您白打了这么多字
风中的少年 2015-08-21
  • 打赏
  • 举报
回复
 <script type="text/javascript">
        var resultCon;
        var name1 = 'window下的name <br />'; // 1.此name 全局可用
        function MyObj() {
			var name3 = 'MyObj 下的私有 name<br />'; // 2.此name 为MyObj私有变量
			
			this.name = 'MyObj下的name<br />'; // 3. name 是myObj 的一个属性,可通过.来调用
            this.doFunction = function (name) {
				resultCon.innerHTML += name3; // 4.这里的name为MyObj私有变量
				resultCon.innerHTML += this.name; // MyObj下的name 
				
				this.name = name; // 重写
				resultCon.innerHTML += this.name; //  指针指向 此函数内部的name
            };
			
        }
        window.onload = function () {
			
            resultCon = document.getElementById('result');
			resultCon.innerHTML += name1; // 打印
            var obj = new MyObj();
            resultCon.innerHTML += obj.name; // 打印3
			obj.doFunction('88888');
        };
    </script>

    <div id="result">代码输出结果:<br /></div>
天际的海浪 2015-08-21
  • 打赏
  • 举报
回复
引用 3 楼 qq_18288889 的回复:
额,能不能说的详细一点,这两个this都把我搞晕了
在js面向对象操作时,函数(方法)执行时有“函数局部作用域对象”和“实例对象”两个独立的对象(对象链)

function MyObj() {
    var name = '函数局部作用域对象中的name变量<br/>';
    this.name = '实例对象中的name属性<br/>';
    this.doFunction = function () {
        document.write(name);
        document.write(this.name);
    };
}
var obj = new MyObj();
obj.doFunction();

改天换地 2015-08-21
  • 打赏
  • 举报
回复
额 我刚刚自己调试出来了
    function MyObj() {
            var name = 'MyObj下的name<br/>';
            alert(this instanceof MyObj);
            this.doFunction = function () {            
                resultCon.innerHTML += this.name;
                alert(this instanceof MyObj);
            };        
        }
弹出来两个true ,说明了两个this都是指代obj,obj里面没有name属性所以undefined
misaka去年夏天 2015-08-21
  • 打赏
  • 举报
回复
doFunction是一个函数,在js中,函数也是一个对象,而resultCon.innerHTML += this.name; 这小段代码中,this.name指的是doFunction(是函数也是对象)的name属性。。而doFunction中并没有name属性,所以是undefined啦
改天换地 2015-08-21
  • 打赏
  • 举报
回复
额,能不能说的详细一点,这两个this都把我搞晕了

87,964

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧