在 PHP 中,您可以这样做:
class myClass() {
function doSomething(someVar) {
// do something here
}
// etc... (other methods and properties)
}
然后,当然,您可以在实例化该类之后调用该方法,如下所示:
$myObj = new myClass();
$myObj->doSomething();
但您也可以选择将该方法作为独立函数调用,而无需实例化该类(但您必须注意该函数中的依赖项),如下所示:
myClass::doSomething();
我相信这是为 C++ 借来的东西...
它被称为范围解析运算符(PHP 代码中的 Paamayim Nekudotayim ...)
http://en.wikipedia.org/wiki/Scope_resolution_operator#PHP
http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php
你会如何在 JavaScript 中做这样的事情?这似乎是不可能的。 也许我以错误的方式处理这个问题,我应该公开我正在努力实现的目标......
我只是有一个函数,它是这样的:
function submitContactForm(form) {
// pretty JavaScript...
}
我很高兴它是一个函数。但我想实现一个“resetContactForm()”,但希望以某种方式将它附加到 submitConatctForm 函数。
我知道我可能会这样做:
var contactForm = {
"submit" : function(form) {
//...
},
"reset" : function(form) {
//...
}
}
我会这样回答我自己的问题...
但是,除了我不喜欢这种语法并且想避免使用它之外,还有一个事实是上面的结构不能用作类定义,它与 PHP 中的不一样。 ..所以回到最初的问题:有没有一种方法可以让 JavaScript 结构同时用作类定义和独立函数的集合?
最佳答案
您误解了原型(prototype)继承 - 您实际上可以将第二个示例用作“类”定义,并且可以从“类”或“实例”调用方法:
// This is a normal JavaScript object
// not JSON as another commenter pointed out.
var ContactForm = {
submit: function(form) {
form = form || this.form;
// general contact form submission implementation
},
reset: function(form) {
form = form || this.form;
// general contact form reset implementation
},
setForm: function(form) {
this.form = form;
}
};
// Now we will create an instance of the contactForm "class"
// We are setting the prototype of `firstContactForm`
// to point at the `contactForm` object.
// If we wanted to we could create a function on the
// ContactForm object (e. g. `create`) that would invoke
// Object.create for us. (i. e. `ContactForm.create()`)
var firstContactForm = Object.create(ContactForm);
firstForm.setForm(document.getElementById("someForm"));
firstForm.reset();
// But, we can also use the function as a "static":
ContactForm.reset(document.getElementById("someForm"));
在回答你问题的另一部分时,如果你想让它成为可调用的“独立”的东西,你也可以允许直接传入数据,就像我们在示例中所做的那样 表格=表格|| this.form;
检查 submit
和 reset
。
或者,您可以使用 call
和 apply
( as @elclanrs points out in his answer ) 并始终使用 this.form
:
ContactForm.reset.call({form: document.getElementById("someForm")});
关于Javascript 相当于 PHP 的::(范围解析运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956760/