基于JavaScript原型的面向对象编程风格很有趣,但是在很多情况下,你需要能够从一个类创build对象。 例如在一个vector绘图应用程序中,工作区通常在绘图的开始处是空的:我不能从现有的一个创build一个新的“线”。 更一般地说,每个dynamic创build对象的情况都需要使用类。 我已经阅读了很多教程和书“Javascript:好的部分”,但是在我看来,没有办法定义尊重1)封装和2)有效的成员方法声明的类(我的意思是:成员方法被定义一次,并在每个类实例之间共享)。 要定义私有variables,正在使用闭包: function ClassA() { var value = 1; this.getValue = function() { return value; } } 这里的问题是,“ClassA”的每个实例都有自己的成员函数“getValue”副本,效率不高。 为了有效地定义成员函数,正在使用原型: function ClassB() { this.value = 1; } ClassB.prototype.getValue = function() { return this.value; } 这里的问题是成员variables“value”是公开的。 我不认为这个问题可以很容易地解决,因为在创build对象的时候需要定义“私有”variables(这样对象可以访问创build的上下文,而不会泄露值),而基于原型的成员函数定义必须在创build对象之后完成,所以原型才有意义(“this.prototype”不存在,我已经检查过)。 还是我错过了什么? 编辑: 首先,感谢你的有趣答案。 我只是想为我的最初信息添加一点精确度: 我真正想要做的是有1)私有variables(封装是好的,因为人们只能访问他们所需要的)和2)有效的成员方法声明(避免副本)。 看来简单的私有variables声明实际上只能通过javascript中的闭包实现,这就是为什么我关注基于类的方法。 如果有一种方法可以通过基于原型的方法实现简单的私有variables声明,那对我来说就没有问题了,我不是一个激烈的基于类的方法proponnent。 阅读答案后,似乎简单的解决办法是忘记私有,并使用特殊的编码惯例,诋毁其他程序员直接访问“私人”variables… 我同意,我的标题/第一句对我想在这里讨论的问题有误导性。
尝试了stackeroverflow qn所以它让我思考为什么不重载的function,我想出了一个稍微不同的代码,但它说,该function不能超载。 我的问题是为什么? 还是有另一种方式? #include <iostream> using std::cout; class Test { public: Test(){ } int foo (const int) const; int foo (int ); }; int main () { Test obj; Test const obj1; int variable=0; do{ obj.foo(3); // Call the const function obj.foo(variable); // Want to make it call the non const function variable++; usleep […]
为什么我们不能在非静态的内部类中使用静态方法? 如果我让内部类静态它的作品。 为什么?
例: public class TestClass { public static void main(String[] args) { TestClass t = new TestClass(); } private static void testMethod(){ abstract class TestMethod{ int a; int b; int c; abstract void implementMe(); } class DummyClass extends TestMethod{ void implementMe(){ } } DummyClass dummy = new DummyClass(); } } 我发现上面这段代码在Java中是完全合法的。 我有以下问题。 在方法里面有什么类的定义? 将为DummyClass生成一个类文件 我很难以面向对象的方式想象这个概念。 在行为中有一个类定义。 […]
我是新来的部分类,并想知道是否有人可以给我一个概述,为什么我会使用它们,我会在这个过程中获得什么优势。
我在angular.js中使用了指令/类ng-cloak或ng-show 。 Chrome工作正常,但是Firefox使用ng-cloak或者ng-show引起了闪烁的元素。 恕我直言,这是由ng-cloak / ng-show为style="display: none;" ,可能Firefox的JavaScript编译器有点慢,所以元素出现一段时间,然后隐藏? 例: <ul ng-show="foo != null" ng-cloak>..</ul>
我将数据添加到要通过第三方API发送的stdClass对象,所以我给这个对象的元素的名称实际上是由该外部服务定义的。 $insertArray = array(); $insertArray[0] = new stdclass(); $insertArray[0]->Name = $name; $insertArray[0]->PhoneNumber = $phone; 直到我遇到一个名字无效的房产时,这一切都奏效了。 $ insertArray [0] – > First.Name = $ firstname; 所以这是不正确的PHP语法,那么有没有办法解决这个问题?
如果我有几个function需要但是要分开存放的组织,我可以扩展一个类来兼有吗? 即class a extends b extends c 编辑:我知道如何一次扩展一个类,但我正在寻找一种方法来即时扩展一个类使用多个基类 – AFAIK你不能这样做在PHP中,但应该有办法解决它,而不诉诸class c extends b , class b extends a
我有这个代码: private static $dates = array( 'start' => mktime( 0, 0, 0, 7, 30, 2009), // Start date 'end' => mktime( 0, 0, 0, 8, 2, 2009), // End date 'close' => mktime(23, 59, 59, 7, 20, 2009), // Date when registration closes 'early' => mktime( 0, 0, 0, 3, 19, 2009), // Date when […]
在Python中,是否有一种方法来绑定一个未绑定的方法而不调用它? 我正在编写一个wxPython程序,对于某个类,我决定将所有button的数据组合到一起,形成一个类级别的元组列表,如下所示: class MyWidget(wx.Window): buttons = [("OK", OnOK), ("Cancel", OnCancel)] # … def Setup(self): for text, handler in MyWidget.buttons: # This following line is the problem line. b = wx.Button(parent, label=text).Bind(wx.EVT_BUTTON, handler) 问题是,由于handler所有值都是未绑定的方法,所以我的程序在壮观的火焰中爆炸,我哭了。 我在网上寻找解决scheme似乎应该是一个相对简单,可解决的问题。 不幸的是我找不到任何东西。 现在,我正在使用functools.partial来解决这个问题,但是有谁知道是否有一种干净的感觉,健康的Pythonic方法将一个未绑定的方法绑定到一个实例,并继续传递而不调用它?