我看过this和this(感谢谷歌) 但它没有足够的帮助。我想知道,如果,开箱即用,没有任何插件插件,可以做一些像原型一样的事情,例如:
MyClass = Class.create(Table,
{
cookieName: 'w_myclass',
prefix: 'myclass',
...blabla...
// function
initStr: function()
{
...blabla...
},
// another function
getIndice: function(param)
{
...blabla...
return 0;
}
});
欢迎任何想法/建议。
答案 0 :(得分:6)
JQuery从未有过成为类框架的目的。它是关于页面操作和工具(如AJAX)。你可以用叉子敲钉子,但为什么不用锤子?
使用本机JavaScript创建基于类的继承系统会遇到麻烦,除非您是一名技术娴熟的JavaScript程序员。 Douglas Crockford will tell you it's possible,但他对闭包等的复杂性有深刻的理解。此外,如果系统变大,使用本机继承功能会变得不可持续。
我强烈推荐James Coglan的JS.Class框架。类定义看起来与您的示例几乎相同。它不是本机JS,但它适用于JQuery。
答案 1 :(得分:3)
如果你想要一个使用javascript和jquery的面向近对象的解决方案,你可以在javascript中定义一个将设置你的事件控制器的对象。
这篇文章的后半部分http://www.codescream.com/?p=18涵盖了这一点。但我会在这里写一篇关于如何在javascript中创建一个可以在近物体导向结构中使用的对象的简历。
它看起来像这样:
function myObject(constructorParam1, constructorParam2, anotherOne, blabla){
var text = "";
// this event will be set everyTime you run myObject
$(".foo").click(function(){
text = $(this).text(); // copies the text inside the elements ".foo" to a local variable
doSomething();
});
function aPrivateFunction1(){
}
function aPrivateFunction2(){
}
function internalAdd(a,b){
return a+b;
}
var size = 1; // privateVaribale
var name = blabla;
if(name===undefined){
name="No name";
}
aPrivateFunction1(); // run "aPrivateFunction1()
// you can consider all code above as being part of the constructor.
// The variables declared above are private, and the functions are private as well
// bellow are public functions that you can access in an OOP manner
return {
getSize: function(){
return size;
},
setSize: function(newSize){
size = newSize;
},
getName: function(){
return name;
},
setName: function(newName){
name = newname;
},
addAndTurnPositive: function(n1,n2){
var val = internalAdd(n1,n2);
if(val<0){
return val*-1;
}
return val;
}
}
}
// then you can run it like
var anInstance = myObject("aaa",1234,"asdak",123);
anInstance.setSize(1234);
var t = anInstance.addAndTurnPositive(-5,2);
答案 2 :(得分:0)
总之,没有。 jQuery不提供任何类和继承功能。您需要包含另一个库,例如klass(尽管有一个jQuery plugin与jQuery更紧密地联系在一起)