不确定我在这里做错了什么,我只是希望能够将对象的功能引用到对象范围
myscipt.js
function MyFoo () {
this.name = 'myname';
}
function MyBar () {
this.myFoo = new MyFoo();
function setMyFoosName( name ) {
this.myFoo.name = name;
}
}
somepage.html
<scipt>
$('document').ready( function() {
$.myBar = new MyBar();
}
...
some action
...
$.myBar.setMyFoosName( 'new name' );
</script>
这引发了一个例外:
this.myFoo.name = name; this.myFoo is not defined
答案 0 :(得分:4)
Lekensteyn和Ken各得一半。
我就是这样做的:
function MyFoo () {
this.name = 'myname';
}
function MyBar () {
var that = this;
this.myFoo = new MyFoo();
this.setMyFoosName = function( name ) {
that.myFoo.name = name;
}
}
答案 1 :(得分:0)
this
引用setMyFoosName
的范围。您应该将this
放入变量中,并引用该变量:
function MyFoo () {
this.name = 'myname';
}
function MyBar () {
var that = this;
this.myFoo = new MyFoo();
this.setMyFoosName = function( name ) {
that.myFoo.name = name;
}
}
尽量避免导出应该保密的变量:
function myFoo () {
this.name = 'myname';
}
function MyBar () {
/* myFoo is private */
var myFoo = new MyFoo();
this.setMyFoosName = function( name ) {
myFoo.name = name;
}
}
通过这种方式,你不能破坏你的功能:
$.myBar = new MyBar();
$.myBar.myFoo = new EvilObject();
$.myBar.setMyFoosName();
当然,这取决于您的使用,myFoo
是否应该可以覆盖。
答案 2 :(得分:0)
您是否可以使用JSON数据类型执行实例静态方法?
var MyFoo = {
_instance : null,
Instance : function(){
if(this._instance == null)
{
this._instance = new this.Object();
}
return this._instance;
},
Object : function()
{
this.name = 'not robert';
}
}
function MyBar (){
this.setMyFoosName = function ( name ) {
MyFoo.Instance().name = name;
}
}
Bar = new MyBar()
Bar.setMyFoosName('Robert');
只要MyFoo在全球范围内,就可以提供更多的全球范围等等。