我应该如何构造JavaScript?

我应该如何构造JavaScript?,javascript,Javascript,我在计算JavaScript的结构时遇到了一些问题,等等。。 我在PHP、ActionScript3等语言方面的OOP技能是我认为可以达到的水平,但JS缺乏这一点,这让我在学习过程中产生了很大的偏差 我对AS2中使用的原型功能有一个模糊的理解-我相信这是我能得到的最接近的功能。目前,我的代码如下所示: var slideshow = { property: value, /** * This is a method */ myMethod: fun

我在计算JavaScript的结构时遇到了一些问题,等等。。 我在PHP、ActionScript3等语言方面的OOP技能是我认为可以达到的水平,但JS缺乏这一点,这让我在学习过程中产生了很大的偏差

我对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;
  • 我不知道如何为我创建的一个“对象”创建两个不同的实例(在本例中为幻灯片)
  • 我找不到任何有意义的资源来解释原型特性

  • 任何指针都是supoib。

    任何javascript函数都可以充当类的构造函数,因此请尝试以下操作:

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

    我不赞成apon使用prototype向类中添加方法,因为可能存在性能问题

    下面是一个可以使用的示例类结构。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)
    

    您应该避免使用新的操作员,因为一切都是公开的。执行您想要执行的操作并拥有私有变量和函数的更好方法是执行以下操作:

    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
    

    这很酷-所以我不是给一个对象我的值,而是给一个函数-这听起来对吗?@marty,差不多。“函数”是一个类,真的。@Thomas Shields我能用这个复制一个构造函数吗?很好的信息-我是AS3等中private的一个大用户,但是所有额外的代码使它看起来几乎不值得。此外,缺少子类/超类使得private关键字似乎失去了它的大部分用处?您可以轻松地进行继承。一开始,您可以使用另一个函数来创建另一个对象,而不是将“self”设为空对象。它不是用来上课的。JavaScript在很多方面不像java,或者C++。我会读JavaScript:好的部分。你可以在这里找到一个PDF:一旦你开始理解JavaScript,你就会意识到它实际上是一种比java或C++更具表现力和强大的语言。我确实意识到JavaScript中缺少类。谢谢,这里有一些很好的资源。我也要把那本书看一遍。