Tag: oop

你可以在声明后改变一个Javascript函数吗?

假设我有var a = function() { return 1; } var a = function() { return 1; } 。 是否有可能改变a以便a()返回2 ? 也许通过编辑一个对象的属性,因为每个函数都是一个对象 ? 更新:哇,谢谢所有的答复。 但是,恐怕我不想简单地重新分配variables,而是实际编辑现有的函数。 我正在思考如何在Scala中组合部分函数来创build一个新的PartialFunction 。 我有兴趣在JavaScript中写类似的东西,并认为现有的函数可能会被更新,而不是创build一个全新的Function对象。

Javainheritance的大小成本是多less?

在interwebs上有各种各样的文章,试图在实践中估计特定JVM实现中java.lang.Object的开销。 例如,我已经看到在一些JVM中, 估计为8字节的裸Object的大小开销。 我想知道的是, extends关系的典型JVM实现是否在类层次结构的每个级别引入了增量大小开销。 换句话说,假设你有一个具有N级子类的类层次结构。 O(1)或O(N)类的内存表示的开销是多less? 我想这是O(1),因为虽然一些隐藏的蓬松的东西的大小,你需要是一个Java Object (Vtable,类的链)将随着inheritance层次增长而增长,他们增长每类,实例,并且JVM实现可以在连接到每个Object的常量大小头中存储指向这些实体的常量大小的指针。 所以从理论上讲,任何Java对象的内存表示直接附加的开销应该是O(1)的inheritance深度N.有谁知道在实践中是否是真的?

Python3variables名称的简单区别可以改变代码的运行方式吗?

这个代码… class Person: num_of_people = 0 def __init__(self, name): self.name = name Person.num_of_people += 1 def __del__(self): Person.num_of_people -= 1 def __str__(self): return 'Hello, my name is ' + self.name cb = Person('Corey') kb = Person('Katie') v = Person('Val') 产生以下错误… Exception AttributeError: "'NoneType' object has no attribute 'num_of_people'" in <bound method Person.__del__ of <__main__.Person object […]

如何在PHP中检查特定types的对象

我有一个接受一个PDO对象作为参数的方法,以允许用户使用现有的连接,而不是方法来打开一个新的,并节省资源: public static function databaseConnect($pdo = null) { 我知道is_object()来检查参数是否是一个对象,但我想检查$pdo是否是一个PDO对象,而不是一个对象。 因为用户可以很容易地input(错误地)一个不同types的对象,一个mysqli或类似的东西,整个脚本将会分开。 简而言之:如何检查特定types对象的variables?

抛出RuntimeException的方法应该在方法签名中指明它吗?

例如,框架/ JDK中的许多方法可能会抛出 java.lang.SecurityException 但是这在方法签名中没有被指出(因为这是通常为检查exception保留的做法)。 我想争辩说,在方法sigs中声明RuntimeExceptions有很多好处(类似于静态types检查)。 我喝醉了吗?

Python:我应该使用类还是字典?

我有一个类只包含字段,没有方法,像这样: class Request(object): def __init__(self, environ): self.environ = environ self.request_method = environ.get('REQUEST_METHOD', None) self.url_scheme = environ.get('wsgi.url_scheme', None) self.request_uri = wsgiref.util.request_uri(environ) self.path = environ.get('PATH_INFO', None) # … 这可以很容易地被翻译成字典。 这个类对于未来的添加更加灵活,并且可以使用__slots__快速。 那么使用dict会有什么好处呢? 字典会比上课快吗? 比带插槽的课程还快?

你怎么知道什么时候使用devise模式?

任何人都可以阅读GoF的书来了解devise模式是什么以及如何使用它们,但是当devise模式解决问题时,要弄清楚什么是devise模式? 模式的知识是否推动devise,还是有办法弄清楚如何使用模式来改变devise? 换句话说,模式有没有模式?

静态字段究竟如何在内部工作?

假如你有一堂课, class Foo { public static bar; } 当你说: new Foo(); 我可以想象,在内存中,为这个对象保留一个空间。 …当你再说一遍: new Foo(); …现在你有另一个空间可用的对象。 但是,静态字段究竟在哪里? 我真正想学的是: 对象的引用如何引用它们引用的对象的同一个字段?

Ruby on rails – 静态方法

我想要一个方法每5分钟执行一次,我实现了每当ruby(克朗)。 但它不起作用。 我认为我的方法是不可访问的。 我想要执行的方法位于一个类中。 我想我必须使这个方法是静态的,所以我可以通过MyClass.MyMethod访问它。 但是我找不到正确的语法,或者我正在寻找错误的地方。 Schedule.rb every 5.minutes do runner "Ping.checkPings" end Ping.rb def checkPings gate = Net::Ping::External.new("10.10.1.1") @monitor_ping = Ping.new() if gate.ping? MonitorPing.WAN = true else MonitorPing.WAN = false end @monitor_ping.save end

与行动中的inheritance的angularjs

抽象 我正在使用angular度作为客户端框架的应用程序,棱angular分明的岩石,我真的很高兴使用它,但现在我发现,我用它来复制和粘贴代码,我想组织成类层次结构。 例如,对话框共享一组共同的function,它们需要被打开,closures,提供typeaheadfunction的代码也是从某些父类BaseTypeaheadClassinheritance的第一个候选者,尽pipe我没有在angular度中find的一件事是一种标准的方法组织这些层次结构。 控制器,服务,提供者都使用普通的javascript函数,下面的函数可以通过prototype来扩展,所以我的问题是: 题 组织我的类函数的angular度是什么?是否有任何标准的机制可以从另一个类派生出一个类 PS 我猜想这个问题: 将基类的实现定义为服务,因此它们将被轻松注入到需要该特定类的任何控制器或其他服务中 定义OOP服务并提供将用于创build基类/派生类的方法,如define , derive等 编辑 从最开始问我的问题的时候已经过去了一段时间。 从那以后,我就开始采用我在几个项目中成功使用的方法,我非常喜欢,想和大家分享。 目前angular并没有提供任何用于组织类层次结构的构造,可惜的是,或多或less的大型应用程序不能满足Model / View / Controller / …结构,它必须将代码组织到OOP对象中。 我已经在web开发领域工作了很长一段时间,甚至没有见过一个企业项目正在大量利用JavaScript的OOP优势。 我看到的是巨大的,很好的组织服务器端/数据库端逻辑+接近无限的JavaScript意大利面与客户端的框架和库动物园。 没有MVVM,MVP框架,如knockout.js,骨干,其他…都能够替代OOP。 如果你不使用类,对象,inheritance,抽象,多态等面向对象编程的核心原则,那么你将面临很大的麻烦,最终你会得到一个超长的javascript意大利面条。 对于Angular而言,我认为它是一个与knockout.js / backbone.js /任何其他MVV-nothing框架非常不同的框架,但根据我的实践,它也不是能够替代OOP的银弹。 当我试图不使用Angular OOP时,我最终得到了大部分位于控制器中的重复逻辑。 不幸的是,没有(我没有find)清楚和angular度的方式来打这个问题。 但我已经成功(我认为)解决了这个问题。 我使用了紧凑的零依赖关系库,它只是实现了John Resig's Simple JavaScript Inheritance ( https://github.com/tracker1/core-js/blob/master/js-extensions/040-Class.js )。 在这个库的帮助下,我能够创build/inheritance/创build抽象方法/覆盖它们,换句话说就是在服务器端完成我所习惯的一切。 以下是一个示例用法: Application.factory('SomeChildObject', ['$http', 'SomeParentClass', function ($http, SomeParentClass) { var SomeChildClass = SomeParentClass.extend({ […]