1
$(document).ready(function () {
    var patient = (function (options) {
        var age = options.age;
        var name = options.name;

        function getName() {
            return this.name;
        }

        function setName(val) {
            name = val;
        }

        function getAge() {
            return this.age;
        }

        function setAge(val) {
            age = val;
        }
        return {
            getAge: getAge,
            setAge: setAge,
            getName: getName,
            setName: setName
        }
    })();
});

我意识到我在这里的示例中从未传递任何选项。如果我尝试做类似的事情patient.setAge('100')然后console.log(patient.getAge())我得到一个错误说cannot read property Age of undefined。我试图达到的首要主题是在一个模块中,我如何模拟构造函数来实例化一个新的患者对象,同时保持私有变量和所有爵士乐的所有 OOP 优点。

我在这里看到了一些模块模式中的构造函数示例,但我对它们不太了解。一般来说,在模块中有一个构造函数是一个好主意吗?它的主要目的是否与基于类的语言相似?

4

2 回答 2

1

这是一个构造函数:

function Patient(options) {
    options = options || {};

    this.age = options.age;
    this.name = options.name;
}

$(document).ready(function () {
    var patient = new Patient();
});

如果需要,您可以将其放入模块中。你不应该做的是提供 getter 和 setter,尤其是那些什么都不做的。如果您通过两个属性公开一个变量来获取和设置它,它应该只是一个属性。

于 2013-11-09T17:22:27.227 回答
1

试试这个

   function Patient (options) {
        options = options || {};
        var age = options.age;
        var name = options.name;

        function getName() {
            return name;
        }

        function setName(val) {
            name = val;
        }

        function getAge() {
            return age;
        }

        function setAge(val) {
            age = val;
        }
        return {
            getAge: getAge,
            setAge: setAge,
            getName: getName,
            setName: setName
        }
    });  // pass empty object 

$(document).ready(function () {
    var p1 =  new Patient({});
   var p2 =  new Patient();
    var p3 =  new Patient({age:20});
     var p4 =  new Patient({name:"abcd"});
    var p5 =  new Patient({age:21, name:"abcd"});
}); 
于 2013-11-09T17:25:00.253 回答