<script>
(function(){
function _$(){
this.str = 200;
}
_$.prototype = {
name:(function(){
return this.str;
})(),
type:function(){
return this.str;
},
}
window.$ = new _$();
})();
alert($.name);
alert($.type());
</script>
alert($.name);出错
alert($.type());正常
请教如何使$.name正常
name:(function(){ return this.str; })()
更改为 name:this.str
还是不行。。。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
this只存在于函数体中,在函数被调用时其才有意义。下面利用 Object.defineProperty方法及set/get属性描述器,可以实现你的需要
不知你要这样写代码的目的是什么
楼上说的没错。 其实这里更确切的应该叫做IIFE(立即执行函数). 使用IIFE的时候里面的this都是执行window或者说是全局的global对象。 详情理解可以参考一下,js引擎解析js代码的过程。因为解析器会会首先解析函数,变量名。 如果你是IIFE他不会管你在那一层定义的。他会首先提取出来,在全局中执行。
所以你这样使用,执行的结果肯定是undefined的。
另外,你的第二种方法:
区分的点其实应该是this的指向问题,这里this指向的是_$.prototype。 而你在该原型链上并没有定义name,所以也是undefined
楼上的答案都很对。
1.自执行的匿名函数关键字
this是指向window对象,所以在原型方面中是做不到首先确定this指向一个示例对象2.如果想在构造函数时机来确定原型对象的静态属性,那么直接在构造函数中写就可以了
匿名函数this指向window。