初学JS,今天看了下设计模式,也看大致懂了几种模式之间的区别,只想问一下各位大牛,在那种情况用构造函数方式,那种情况用原型方式,最好有例子,简单的例子也可以,附上说明 。谢谢

解决方案 »

  1.   


    function Person(name,age,sex) {
       this.name = name;
       this.age= age;
       this.sex = sex;
    }Person.prototype.getName = function() {
      return this.name;
    };
    Person.prototype.setName= function(name) {
      this.name = name;
    }
    ...
      

  2.   

    对此。如果你觉得这样的封装不够好的话
    可以这样做
    function Person(name,age,sex) {
       this.name = name;
       this.age= age;
       this.sex = sex;
       if(typeof Person._init == "undefined") { 
          Person.prototype.getName = function() {
             return this.name;
          };
          Person.prototype.setName= function(name) {
             this.name = name;
          }
          ...
       }
       Person._init = true;
    }
      

  3.   

    有一点不是很明白,在使用prototype的时候,提到new2个对象,修改其中的一个,另一个对象也会被修改,那这个在实际应用中应该会有影响吧。
      

  4.   

    好像还有一种  var a = new Object(); a.b=function(){} 我应该把a看出对象吧?是不是new Object后a只能是对象,能new a()吗?
      

  5.   

    如果a是个构造函数就可以new了吧,js中没有真正意义的类,有的是伪类
      

  6.   

    建议到MDN上去看看有关js的介绍,很值得学习。正在继续学习中……
    function Employee(){
    this.name = '';
    this.dept = 'general';
    }
    function Manager(){
    //this.dept = 'manager';
    this.reports = [];
    }
    Manager.prototype = new Employee();
    var  = new Manager();
    alert(.dept);
    给我的感觉像是“顺藤摸瓜”
      

  7.   


    对不起,是我说得严重了。这样做也可以,只不过我觉得初始化与否需要通过一个全局变量
    Person._init来维护有些不安全,而且多余。Person._init随时可能在其他地方被修改到。
      

  8.   

    恩。你说的很对。因为这个解决方案的有个前提是:约定胜于配置
    _开头的为私有变量。这个解决方案是Nicholas C.Zakas推荐的方式之一。
    相对来说也比较完整。
    如果考虑周全的话实现起来较为复杂。开发效率也相对较低些