Javascript对象:属性中的函数或方法
Javascript Object: a function or method in an attribute
我是一个试图把一个方法的结果在一个属性,但我不断得到错误:"Uncaught TypeError: Object [Object DOMWindow]没有方法'ppp'"
这是我的简单代码:
var ttt = {
ddd: 'I said '+ this.ppp() + '!!!',
ppp:function(){
return 'ok';
}
};
alert(ttt.ddd)
谢谢你的帮助
var ttt = {
ddd:function(){
return 'I said '+ this.ppp() + '!!!';
},
ppp:function(){
return 'ok';
}
};
alert(ttt.ddd())
这是好的。你写的代码。DDD是一个字符串,'this'是浏览器中的窗口对象
javascript中没有块作用域(只有函数作用域),所以this.ppp()指的是全局作用域(这意味着它将在窗口对象中查找ppp),因为它不在函数中。
你可以这样重写:
var ttt = (function () {
var innerttt = {
ddd: function () {
return 'I said ' + this.ppp() + '!!!';
},
ppp: function(){
return 'ok';
}
};
return innerttt;
})();
alert(ttt.ddd())
这将给ddd它需要调用ppp的作用域。这意味着this.ppp()的this部分将在函数内部查找ppp关于作用域和闭包的更多信息…http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/
问题是,在你的代码'this'是指窗口对象。
为了解决这个问题,你可以把ttt变成一个自动执行的函数 即var ttt = function() {
function ppp(){
return 'ok'
}
return {
ddd: 'I said '+ ppp() + '!!!',
ppp: ppp
}
}();
此时,您仍然可以使用原始代码来提醒ddd
alert(ttt.ddd)
点击http://jsfiddle.net/aCeqt/
相关文章:
- 如何确保函数/方法参数为certian类型
- Javascript中对象中的函数方法
- Object.assign(),函数方法和内存使用
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 如何使用 Karma、Jasmine 和 Istanbul 指定测试应涵盖哪些函数/方法
- 在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的
- 如何调用通过它传递不同 ID 的函数方法
- Sencha ExtJs 为什么从“构造函数”方法返回“this”
- 这个 JavaScript 函数方法调用了什么
- 如何在 javascript 中从子原型调用父类的构造函数方法
- 是否仍可访问被覆盖的函数/方法
- 在构造函数之外更改 JavaScript 中的构造函数方法
- 这种实例化构造函数方法的风格是什么
- 如何在 JavaScript 中使用继承与构造函数方法一起使用 返回具有私有属性的对象文本
- 我的javascript构造函数方法以文本形式返回整个方法,而不是预期的返回值
- 如何在事件中将变量传递给构造函数方法
- 如何限制用户在ui ace编辑器中只能编写一个javascript函数(方法)
- 打印任何java应用程序的函数/方法调用序列
- 如何在jQuery语句中使用Javascript构造函数方法