返回信息流function SpecialArray() {
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function() {
return this.join("|");
};
return values;
}
var colors = new SpecialArray("red", "blue", "green");
alert(colors.toPipedString());
上面代码的第五行的this,代表的作用域应该是values吧?
是不是javascript中只要是利用构造函数创建的对象,它里面的函数里用到this,这个this所代表的作用域就是这个对象?(因为values是用Array的构造函数创建的)
这是一条镜像帖。来源:北邮人论坛 / www-technology / #25139同步于 2014/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
javascript的构造函数和this指针
wislov
2014/4/21镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
在构造函数里的this指向的是新生成的object,例如:
function Test() {
// this 指向新一个object,这个object的构造函数是Test
}
var a = new Test();
a instanceof Test // true
如果是楼主帖的这个,那么
colors instanceof SpecialArray 的结果是false;
这仅仅说的是构造函数里的this,不同于values.toPipedString中那个this;values.toPipedString的this指的是这个values(如果不考虑使用apply和call的情况);也就是后面的这个colors,因为return的是values,values被赋值给了colors;
如果这么搞一下,比如
window.toPipedString = colors.toPipedString;
window.toPipedString(); //这里的this指的就是window(当然样搞会报错)
其实上边个可以等同于
colors.toPipedString.call(window);
看晕了
【 在 moli 的大作中提到: 】
: 在构造函数里的this指向的是新生成的object,例如:
: function Test() {
: // this 指向新一个object,这个object的构造函数是Test
: ...................
哦。其实那个this就是SpacialArray()函数的this(这里也就是指colors了),但因为values返回给了colors,所以在外面toPipedString()里的this在就相当于对一个数组调用join函数了。描述好麻烦啊
【 在 moli 的大作中提到: 】
: 在构造函数里的this指向的是新生成的object,例如:
: function Test() {
: // this 指向新一个object,这个object的构造函数是Test
: ...................
不善于教。。。
总之,函数的this,要看它是怎么被调用的。
如果是obj.method(),那么method中的this就指向了obj,不管它是在哪里被声明/定义的;
如果是method.call(xxx)或者是method.apply(xxx),那么method中的this指向的就是xxx;
【 在 wislov 的大作中提到: 】
: [code=js]
: function SpecialArray() {
: var values = new Array();
: ...................
this放在函数声明里面就简单理解:
1. 如果函数是被new成对象了,那么this指向这个新生对象(被call和apply的时候用指定上下文替代)
2. 如果函数被执行了,那么指向window
嗯嗯。总之就是调用者吧
【 在 moli 的大作中提到: 】
: 不善于教。。。
: 总之,函数的this,要看它是怎么被调用的。
: 如果是obj.method(),那么method中的this就指向了obj,不管它是在哪里被声明/定义的;
: ...................
嗯。了解了
【 在 rhj1122 的大作中提到: 】
:
: this放在函数声明里面就简单理解:
: 1. 如果函数是被new成对象了,那么this指向这个新生对象(被call和apply的时候用指定上下文替代)
: ...................
汗,上周面试阿里刚做过这个经典的题。。。。
【 在 wislov 的大作中提到: 】
: [code=js]
: function SpecialArray() {
: var values = new Array();
: ...................