AS 不行?

fl1429 2009-02-11
我们知道java中singleton类,实例化一个对象,这个对象可以调用singleton类的属性.

但是在actionscript中怎么不行了...还是我哪里搞错了,

as类:

package model
{
	import flash.events.EventDispatcher;

	[Bindable] //设置类的绑定
	public class ModelLocator
	{
		private static var _instance:ModelLocator;//利用了单例模式
		
		public static var username:String;
		public static var password:String;
		
		public static  function getInstance():ModelLocator{
			if(_instance == null){
				_instance = new ModelLocator();
			}
			return _instance;
		}
	}
}


mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	xmlns:local="*" >

	<mx:Style source = "style.css" />
	<mx:Script>
		<![CDATA[
			import model.ModelLocator;
			
			public var instance:ModelLocator = ModelLocator.getInstance();
			
			internal function doChange():void{
				instance.username = "rootUser";//这里为什么不可以这么写!
				trace("test:"+instance.username);
			}
		]]>
	</mx:Script>
	<mx:Button x="348" y="25" label="Button" click="doChange()"/>
	<local:LoginPanel x="26" y="25">
	</local:LoginPanel>

</mx:Application>



问题见我上面的文字!..why?
andot 2009-02-11
public static var username:String; 
public static var password:String; 

这两个是静态的,不属于实例对象,当然也不属于单体对象了。

fl1429 2009-02-12
instance是ModelLocator类的对象,username和password是ModelLocator的公共属性,instance怎么就不能调用公共属性了?...面向对象语言都是可以的!...郁闷!
foodyi 2009-02-12
fl1429 写道
instance是ModelLocator类的对象,username和password是ModelLocator的公共属性,instance怎么就不能调用公共属性了?...面向对象语言都是可以的!...郁闷!


usernae和password属于ModelLocator类 不属于instance对象
MolelLocator.username 这样应该可以.
fl1429 2009-02-12
MolelLocator.username 这样当然可以.....
instance.username 对象调用类的属性也不行了?

还是搞不清..等待牛人帮忙!
andot 2009-02-13
你这个直接用静态类就行,没必要搞什么单体,搞单体又不能提高效率。
superdandy 2009-02-13
我晕了。 Flex中是不允许私有的构造方法的。 即便你用了getInstance()这种看上去好像是单体模式的东西,别人一样可以new 一个ModelLocator的。 得想别的办法,比如说内部类什么的。 总之是没有什么太好地解决办法的。
flyspider 2009-02-13
ActionScript文档中明确说明了不允许使用实例变量访问类属性,这和java是完全不一样的,java里顶多给你个编译期警告
zhengshina5 2009-02-13
foodyi 写道
fl1429 写道
instance是ModelLocator类的对象,username和password是ModelLocator的公共属性,instance怎么就不能调用公共属性了?...面向对象语言都是可以的!...郁闷!


usernae和password属于ModelLocator类 不属于instance对象
MolelLocator.username 这样应该可以.


支持
whaosoft 2009-02-13
  支持上面的!~
Global site tag (gtag.js) - Google Analytics