javascript call javascript对象 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你自己都说了person不是对象了new完了才是对象 我的意思是说person是一个对象 我搞错了吗 function person(){}这是一个函数new person()这是个对象 javascript所有函数都属于对象下面的。对象有:Object、Function、String、Boolean 、Array、Number、Math、Date、Error、activeXObject对象等等每一个对象都有一个原型属性或者说是原型对象prototype和一个构造函数(和对象名相同的函数)你截图那个说的是这个! 首先,纠正一下,你的代码弹出来的是person其实,回答你的问题,person中的this指向的是通过new person()出来的新对象,不是person本身。student.call(person)之后,student函数中的this指向person这个函数本身,所以弹出来的是这个函数名。 哦。。在IE里弹出来的是undefined。。FF跟chrome弹出来的不是。。其实理论上应该是undefined person 大神这个怎么理解的 我搞糊土了person是一个构造函数,js是函数也是对象,但是函数对象本身 和 用这个函数构造出的实例对象是不同的看下面function person(){ this.name = "我是new出来的实例对象";}person.name = "我是构造函数本身";function student(){ alert(this.name);}student.call(person);student.call(new person); 我觉得LZ还是先简单的理解吧。你的代码第九行student.call(person);多写点应该是window.student.call(person)(如果说的不对欢迎各位高手吐槽)。那么那个apply和call用法几乎相同不同的是apply第二个参数只能是数组而call可以是任意参数(他们第一个参数都必须是对象)。里面那个person单独的来说是属于js大类型对象当中的Function对象(person instanceof Function //返回值是true)正如9楼所说person是一个构造函数,js是函数也是对象,但是函数对象本身 和 用这个函数构造出的实例对象是不同的至于为什么IE下是undefined而FF和chrome下是person即为函数的名字那没什么好说的了就是内核不同对象的解释稍微有点不同。但是我认为那个this.name更应该是自定义属性不应该是构造函数当中一个指向函数名字的属性(因为指向函数名字有person.arguments.callee蓝色字迹部分纯属个人愚见)。那么好如果说把第九行改成window.student.call(new person());这就好理解了直接从call函数概念理解就行了。应用当前对象(window)一个方法(student)用另外一个对象(new person())替换当前对象(window)最终整理下来就是function person(){ this.name = "123"; alert(this.name); }显而易见弹出应该是123(因为他将student当中的逻辑运算用到new person()对象当中了就是person函数当中。student当中逻辑运算就一句话alert(this.name))所以LZ输出现象并不奇怪。OK扯的太多了我说完了欢迎各位高手批评指正 function person(){ this.name = "123"; } alert(person.name);//意思是返回函数名,所以是"person" var a = new person();//new出一个对象 console.log(a.toSource());//({name:"123"}) alert(a.name);//当然就是"123" FF跟chrome中的Function对象本身自带name属性,其值就是函数名。并且是只读的。 Extjs3.2函数中参数使用问题 我的js特效为什么在360安全和IE8上都不显示呢,亲 IE6 图片轮换效果JS报类不能支持automation操作 Javascript包含URL转码 Google地图API使用次数限制问题 能否简化一下这个js。 刷新的问题 如何刷新iframe? 如何判断鼠标离开一个窗口? 在javascript中,怎样响应键盘事件 封装的方法包含了AJAX,如何在调用这个方法时,确保,AJAX已执行完! jquery,在当前表格选择另外一个表格的tr,是怎么写
new person()这是个对象
对象有:Object、Function、String、Boolean 、Array、Number、Math、Date、Error、activeXObject对象等等
每一个对象都有一个原型属性或者说是原型对象prototype和一个构造函数(和对象名相同的函数)
你截图那个说的是这个!
student.call(person)之后,student函数中的this指向person这个函数本身,所以弹出来的是这个函数名。
person是一个构造函数,js是函数也是对象,但是函数对象本身 和 用这个函数构造出的实例对象是不同的
看下面function person(){
this.name = "我是new出来的实例对象";
}
person.name = "我是构造函数本身";function student(){
alert(this.name);
}
student.call(person);
student.call(new person);
那么那个apply和call用法几乎相同不同的是apply第二个参数只能是数组而call可以是任意参数(他们第一个参数都必须是对象)。
里面那个person单独的来说是属于js大类型对象当中的Function对象(person instanceof Function //返回值是true)正如9楼所说
person是一个构造函数,js是函数也是对象,但是函数对象本身 和 用这个函数构造出的实例对象是不同的
至于为什么IE下是undefined而FF和chrome下是person即为函数的名字那没什么好说的了就是内核不同对象的解释稍微有点不同。
但是我认为那个this.name更应该是自定义属性不应该是构造函数当中一个指向函数名字的属性(因为指向函数名字有person.arguments.callee蓝色字迹部分纯属个人愚见)。
那么好如果说把第九行改成window.student.call(new person());这就好理解了直接从call函数概念理解就行了。
应用当前对象(window)一个方法(student)用另外一个对象(new person())替换当前对象(window)
最终整理下来就是
function person(){
this.name = "123";
alert(this.name);
}
显而易见弹出应该是123(因为他将student当中的逻辑运算用到new person()对象当中了就是person函数当中。student当中逻辑运算就一句话alert(this.name))所以LZ输出现象并不奇怪。
OK扯的太多了我说完了欢迎各位高手批评指正
this.name = "123";
}
alert(person.name);//意思是返回函数名,所以是"person"
var a = new person();//new出一个对象
console.log(a.toSource());//({name:"123"})
alert(a.name);//当然就是"123"
FF跟chrome中的Function对象本身自带name属性,其值就是函数名。并且是只读的。