方法一function kk(){
this.i=0
}
kk.prototype.add=function(){
alert(++this.i)
}
kk.prototype.clear=function(k){
this.i=k
}
var p=new kk()
p.add();
p.add();
p.clear(12)
p.add();

})
方法二var a=function(){
      var i=0;
  return {
  add:function(){alert(++i)},
  clear:function(k){i=k}
  }
    }()
a.add()
a.add()
a.clear(12)
a.add()问题:
对于方法一,方法二我都可以建立自己的属性和方法,那哪种写法更好更标准?或者说这两种写法个适用于什么样的情况下。

解决方案 »

  1.   

    ECMAScript 定义类或对象
      

  2.   

    看需求,kk()函数成了构造函数,使用时注意一定不要忘掉new;a函数返回了包含方法的的对象,实际上是闭包。
      

  3.   

    还有疑问是对于方法二我见过
    var p=(function(){})()
    var p=function (){}()
    var p=new function(){}()这三种写法有什么不同我在方法二中运行的效果都一样
      

  4.   

    楼主第一种 写的是 构造函数的写法
    好处是可以new 多个对象var a=function(){
          var i=0;
          return {
              add:function(){alert(++i)},
              clear:function(k){i=k}
              }
        }()
    方法2里面这个应该是 使用了一个函数自执行
    这个地方应该少了一对括号吧?
    第二种应该只实例化了一个对象.
      

  5.   

    对第一种情况类似于java类,可以new N多个对象,推荐 javascript王者归来 这本书你去看看,在该书的134-136页有详细的解释