Actionscript 3 更好地使用setter和getter
我有一个关于盖特和塞特的神奇方法的问题 我的问题是:什么更好更快更安全 另外,这是ActionScript3,但对于其他语言,如PHP、JavaScript和C,这个问题也可以得到回答 案例1Actionscript 3 更好地使用setter和getter,actionscript-3,oop,setter,getter,Actionscript 3,Oop,Setter,Getter,我有一个关于盖特和塞特的神奇方法的问题 我的问题是:什么更好更快更安全 另外,这是ActionScript3,但对于其他语言,如PHP、JavaScript和C,这个问题也可以得到回答 案例1 public class Test extends Sprite { private var _test : uint = 0; public function Test() { start(); }
public class Test extends Sprite
{
private var _test : uint = 0;
public function Test()
{
start();
}
private function start() : void
{
trace(_test); ** Take the private var _test **
}
public function set test(value : uint) : void
{
_test = value;
start();
}
public function get test() : uint
{
return _test;
}
}
或案例2
public class Test extends Sprite
{
private var _test : uint = 0;
public function Test()
{
start();
}
private function start() : void
{
trace(test); ** difference here, take the public function test **
}
public function set test(value : uint) : void
{
_test = value;
start();
}
public function get test() : uint
{
return _test;
}
}
最快的方式是什么
谢谢 你已经完成了90%的编写自己的测试用例来发现自己的能力 getter和setter用于添加对设置或检索属性时发生的事情的控制,或者创建只读或只读属性 这些好处大大超过了任何可能的性能差异 对于这些性能差异,这里有一个测试环境:
// Test property.
var _test:uint = 0;
function get test():uint{ return _test; }
function set test(value:uint):void{ _test = value; }
// Direct access test.
function directTest(amt:int):Number
{
// Directly accessing the property.
var t:Number = getTimer();
for(var i:int = 0; i < amt; i++)
{
var temp:uint = _test;
_test = i;
}
return getTimer() - t;
}
// Getter/setter test.
function viaTest(amt:int):Number
{
// Via getter/setter.
var t:Number = getTimer();
for(var i:int = 0; i < amt; i++)
{
var temp:uint = test;
test = i;
}
return getTimer() - t;
}
我得到了一些结果:
Amount Direct Get/Set
1000 0 0
5000 0 0
20,000 0 2
150,000 1 14
500,000 2 46
2,000,000 10 184
10,000,000 47 921
在编写自己的测试用例以了解自己的过程中,您已经完成了90% getter和setter用于添加对设置或检索属性时发生的事情的控制,或者创建只读或只读属性 这些好处大大超过了任何可能的性能差异 对于这些性能差异,这里有一个测试环境:
// Test property.
var _test:uint = 0;
function get test():uint{ return _test; }
function set test(value:uint):void{ _test = value; }
// Direct access test.
function directTest(amt:int):Number
{
// Directly accessing the property.
var t:Number = getTimer();
for(var i:int = 0; i < amt; i++)
{
var temp:uint = _test;
_test = i;
}
return getTimer() - t;
}
// Getter/setter test.
function viaTest(amt:int):Number
{
// Via getter/setter.
var t:Number = getTimer();
for(var i:int = 0; i < amt; i++)
{
var temp:uint = test;
test = i;
}
return getTimer() - t;
}
我得到了一些结果:
Amount Direct Get/Set
1000 0 0
5000 0 0
20,000 0 2
150,000 1 14
500,000 2 46
2,000,000 10 184
10,000,000 47 921
我总是喜欢在同一类的方法中使用getter和setter,虽然我可以使用privare变量 getter和setter隐藏了必须设置或获取类属性时所需的逻辑,因此可以修改setter/getter中的实际操作,而不必担心对客户端方法的影响 它们还避免了代码的重复
但这只是我的观点…: 尽管我可以使用privare变量,但我始终更喜欢在同一类的方法中使用getter和setter getter和setter隐藏了必须设置或获取类属性时所需的逻辑,因此可以修改setter/getter中的实际操作,而不必担心对客户端方法的影响 它们还避免了代码的重复
但这只是我的观点…: 如果我设置并获得每秒100次的属性呢?@Bondye,哇,每秒100次?!在这里要小心,你可能会烤坏你的CPU。@Bondye我已经添加了一些实际数据,以供你观看。基本上,即使访问该物业1000万次,您也只需不到一秒钟的时间就可以看到这两个选项。@MartyWallace谢谢您!如果我设置并获得每秒100次的属性呢?@Bondye,哇,每秒100次?!在这里要小心,你可能会烤坏你的CPU。@Bondye我已经添加了一些实际数据,以供你观看。基本上,即使访问该物业1000万次,您也只需不到一秒钟的时间就可以看到这两个选项。@MartyWallace谢谢您!我没想过。我将使用getter和setter,这样我就不会重复操作属性的代码了。我将使用getter和setter,这样我就不会重复操作属性的代码。