使用'使用严格'在我的js文件中声明它不允许我在ist级别之后使用javascript this
'use strict'
module.exports = {
a: function() {
var self = this //works fine upto this level
var name = 'atul';
function b() {
this.name = name; //gives me error as can not set property name of undefined
}
}
}
答案 0 :(得分:1)
这个和Javascript:
此对调用对象示例的引用:
var x = {name: "x", alphabet: function(){return this;}};
x.alphabet(); // in this line, x is the calling object
这将显示对象本身。
所以当你这样做时:
...
a: function() {
var self = this //works fine upto this level
var name = 'atul';
function b() {
this.name = name; //use strict is trying to tell you something
}// you won't have a calling object for this function.
}
...
use-strict说:这个函数甚至不是对象属性或方法。由于它不是一种方法,因此这个将指向全局对象并导致容易出错的开发。
如果您希望以这种特殊方式使用您的代码。
module.exports = {
a: {
name: 'atul';
b: function (name) {
this.name = name; // now you have a as the property which can be called by an object a.
//To be used as OBJECT.a.b();
}
};
};
答案 1 :(得分:-1)
this
未定义,因为它未以严格模式自动装箱到对象。
首先,在严格模式下传递给函数的值不会强制成为对象(a.k.a。“boxed”)。对于普通函数,它始终是一个对象:如果使用对象值this调用提供的对象;如果使用布尔值,字符串或数字调用,则为盒装值;或者使用undefined或null调用全局对象。 (使用call,apply或bind来指定特定的。)不仅自动装箱会降低性能,而且在浏览器中暴露全局对象也存在安全隐患,因为全局对象提供了对“安全”JavaScript环境的功能的访问必须限制。因此,对于严格模式函数,指定的函数不会被装入对象中,如果未指定,则这将是未定义的
在MDN
了解详情