2011-04-28 84 views
9

我在处理JavaScript的结构等方面遇到了一些麻烦。 我在PHP,ActionScript 3等语言中使用OOP技能是我认为是平等的,但JS是缺乏这在我的学习中把我扔了很多。我应该如何看待构建我的JavaScript?

我对原型功能有一个模糊的理解,我在AS2中使用了一点 - 我相信这是我能够得到的最接近的功能。目前,我正在铺设类似我的代码如下:

var slideshow = 
{ 
    property: value, 

    /** 
    * This is a method 
    */ 
    myMethod: function() 
    { 
     // do method things 
    } 
}; 

// ------ 
slideshow.property ++; 
slideshow.myMethod(); 

这一切工作正常,但它是无效我做的是这样的能力:

var myslideshow1 = new Slideshow(); 
var myslideshow2 = new Slideshow(); 

myslideshow1.property = 10; 
myslideshow2.property = 16; 
  1. 我不是肯定如何去创建我创建的一个“对象”的两个不同实例(在这种情况下,幻灯片)。
  2. 我找不到任何解释原型功能的资源。

任何指针都是supoib。

回答

4

任何JavaScript功能,可以作为一个类的构造函数,那么试试这个:

function SlideShow(params) { 
    return { 
     property: value, 
     myMethod: function() { 
      //do method things 
     }; 
    }; 
}; 
var slideshow1 = new SlideShow(params); 
slideshow1.property = 10; 
//etc. 
+0

这很酷 - 这样,而不是给一个对象我的价值观,我将它们给一个函数相反 - 这听起来正确吗? – Marty 2011-04-28 01:41:53

+0

@marty,差不多。 '功能'是作为一个班级,真的。 – 2011-04-28 01:44:38

+0

天才 - 谢谢。 – Marty 2011-04-28 01:46:35

2

我不会赞成APON使用原型方法添加到一个类,可能会有性能问题

以下是您可以使用的示例类结构。 JavaScript类没有太大的不同功能。

function MyItem(){ 
    this.d = ''; 
    this.clear = function() { 
    this.d = ''; 
    } 
} 
var myItem = new MyItem() 
myItem.d = "test"; 
alert(myItem.d); 
myItem.clear(); 
alert(myItem.d) 

Some good reading here

+0

感谢您的链接! – Marty 2011-04-28 01:44:15

2

您应该避免使用new运算符,一切都是公开的。一个更好的办法做你想做的事,并有私有变量和函数是做到以下几点:

var slideshow = function() { 
    var self = {}; 
    var private_param = "hello"; 
    var private_func = function(say) { 
     alert(say); 
    }; 
    var method = function() { 
     private_func(private_param); 
    }; 
    var param = 500; 

    self.method = method; 
    self.param = param; 

    return self; 
    // return object, with the method func and param param publicly accessible 
    // private_param and private_func are not accessible to the outside 
}; 

var presentation = slideshow(); // new slideshow, you could edit to pass in init params 
presentation.method(); // hello 
+0

良好的信息 - 我是AS3私人的大用户等,但所有额外的代码使它似乎几乎不值得。另外,缺少子类/超类使得它看起来像private关键字失去了它的有用性块? – Marty 2011-04-28 03:06:19

+1

您可以轻松完成继承。在开始时,将“self”设为空对象,可以使用另一个创建另一个对象的函数。 – gkz 2011-04-28 03:10:59

+0

要记住的一件大事是,JavaScript没有类。这并不意味着要上课。 JavaScript在许多方面不像Java或C++。我会阅读JavaScript:好的部分。你可以在这里找到它的pdf:http://eleventyone.done.hu/OReilly.JavaScript.The.Good.Parts.May.2008.pdf一旦你开始理解JavaScript,你会意识到它实际上是一个更多表达力和强大的语言比Java或C++。 – gkz 2011-04-28 03:12:56

相关问题