为什么在这种情况下,“This”确实充当javascript函数中的私有成员
Why "This" does act as a private member in a javascript function in this case?
我尝试在函数中调用公共成员,它显示为"未定义",但该函数有效...
--编辑--
正如@Shane Voisard所指出的,this
是我的职能的父级成员。
解决方案是为函数命名(如 Shane 在答案中强调的那样(。
。或者将函数附加到名称:
MySite.Public.Logo = {
inject : function(target){
this.name = 'Logo';
...
}
}
在控制台中:
MySite.Public.Modules.Logo.name; //return "Logo"
等等...谢谢 所以
--/编辑--
我的文件系统是这样的
root folder :
-rw-r--r-- 1 www-data www-data 1921 avril 3 17:31 0.js
drwxr-xr-x 9 www-data www-data 4096 avril 3 17:37 public
public folder :
-rw-r--r-- 1 www-data www-data 214 avril 3 17:37 0.js
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 modules
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 factories
drwxr-xr-x 2 www-data www-data 4096 avril 3 17:40 functions
drwxr-xr-x 2 www-data www-data 4096 avril 2 22:22 singleton
module folder :
-rw-r--r-- 1 www-data www-data 28 mars 31 06:07 1.js
-rw-r--r-- 1 www-data www-data 348 avril 3 17:51 logo.js
加载按以下顺序进行:
root/0.js
初始化MySite = {}
public/0.js
初始化MySite.Public = {}
module/1.js
初始化MySite.Public.Modules = {}
加载所有其他需要的文件时,public/0.js
调用 MySite.Public.Modules.Logo()
,当logo.js
加载到浏览器中时已初始化。该功能有效,我可以从徽标.js获得回报。但是this
成员中没有一个是公开访问的......
logo.js
内容 :
MySite.Public.Modules.Logo = function(){
this.name = 'Logo';
this.build = function(){
var logo = MySite.Public.Factories.HTML.make('logo');
return logo;
};
this.inject = function(target){
var logo = this.build();
var target = MySite.Public.Functions.ToolBox.getElementByName(target); //getElementByName is a custom function
target.appendChild(logo);
};
}
在控制台中:
MySite.Public.Modules.Logo.inject('body'); // undefined is not a function...
MySite.Public.Modules.Logo.build(); // undefined is not a function...
MySite.Public.Modules.Logo.name; // ""
typeof MySite.Public.Modules.Logo; // "function"
logo.js
的内容 ://测试函数我给构造函数的目标
MySite.Public.Modules.Logo = function(target){
this.name = 'Logo';
this.build = function(){
var logo = MySite.Public.Factories.HTML.make('logo');
return logo;
};
this.inject = function(target){
var logo = this.build();
var target = MySite.Public.Functions.ToolBox.getElementByName(target);
target.appendChild(logo);
};
this.inject(target);
}
在控制台中:
MySite.Public.Modules.Logo('body'); //works
不过...
MySite.Public.Modules.Logo.inject('body'); // undefined is not a function...
MySite.Public.Modules.Logo.build(); // undefined is not a function...
MySite.Public.Modules.Logo.name; // ""
typeof MySite.Public.Modules.Logo; // "function"
请问有人知道我做错了什么吗?
尝试:
MySite.Public.Modules.Logo()
MySite.Public.Modules.name // "Logo"
调用 Logo(( 时,this.name
指的是MySite.Public.Modules
对象。 在对象方法上下文中调用函数时,javascript 会在运行时将对象隐式分配给调用函数内部this
。
如果要在函数对象上定义方法,请为函数命名,然后在函数中引用该名称:
MySite.Public.Modules.Logo = function init(target){
init.l_name = 'Logo';
init.getName = function { return l_name };
init.build = function(){
var logo = MySite.Public.Factories.HTML.make('logo');
return logo;
};
init.inject = function(target){
var logo = init.build();
var target = MySite.Public.Functions.ToolBox.getElementByName(target);
target.appendChild(logo);
};
init.inject(target);
}
编辑:函数对象的name
属性可能是只读的,具体取决于javascript环境。 因此,您可能需要在内部使用不同的属性名称并公开一个漂亮的访问器方法。 例如,在Chrome开发人员工具中,我无法分配给init.name
。
MySite
是您的全局对象,但您引用Innov24
好像Innov24 = MySite
.
我强烈推荐 Douglas Crockford 的 Javascript: The Good Parts。
- 从函数JavaScript返回不可变数组/对象
- 将对象传递给函数.JavaScript
- 如何定义const函数javascript(语法糖)
- 新的日期函数javascript
- TypeError:this.getAttribute不是一个函数-javascript
- 从函数javascript发送变量
- 扩展自容器函数Javascript
- 从内部函数javascript内部分配外部函数的对象
- 使用函数JavaScript中的函数
- 在这里使用回调函数(JavaScript)有什么好处吗
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 将“e”传递给一个新函数 - javascript
- 调用函数中的一个函数——Javascript
- 传递的变量不适用于我的函数-Javascript
- 如何将类方法设置为等于多个函数?-Javascript
- 显示php中的函数javascript
- 如何使用php代码创建函数Javascript弹出框
- 未调用的外部函数-javascript
- 如何在类中运行函数.Javascript
- 关闭mouseover上的一个函数——Javascript,jQuery