Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中使用正确的函数创建对象帮助器_Javascript_Jquery_Function_Object - Fatal编程技术网

在javascript中使用正确的函数创建对象帮助器

在javascript中使用正确的函数创建对象帮助器,javascript,jquery,function,object,Javascript,Jquery,Function,Object,我计划在我的js中创建这样的对象帮助器: var person_helper = { isAlive : function(person) { ... }, isHisNameIs : function(person,name) { ... }, isSeniorCitizen : function(person) { } } 这样,我就可以这样称呼助手: person_helper.isAlive(person_object);

我计划在我的js中创建这样的对象帮助器:

var person_helper = {
   isAlive : function(person) {
      ...
   },
   isHisNameIs : function(person,name) {
      ...
   },
   isSeniorCitizen : function(person) {

   }
}
这样,我就可以这样称呼助手:

person_helper.isAlive(person_object); 
person_helper.isHisNameIs(person_object,"Dan"); 
person_helper.isSeniorCitizen(person_object);
现在,我的问题是:既然我在person helper中使用person对象,而且我可能会反复使用同一个对象-有没有一种方法可以这样编写helper?:

person_helper(person_object).isAlive();
person_helper(person_object).isHisNameIs("Dan");
person_helper(person_object).isSeniorCitizen();
  • 这样写合乎逻辑吗?(主要是为了在定义函数时避免每次传递“person”对象)
  • 我该如何编写它才能工作

  • 你会在网上找到非常好的东西。 关键是您可以创建一个对象,将其存储为person\u助手的属性:

    var person_helper = {
        ...
        /** which is the same than create a new instance of Person Object. */
        person : function person(firstname,lastname,age,eyecolor) {
            this.person = {};
            this.person.firstname=firstname;
            this.person.lastname=lastname;
            this.person.age=age;
            this.person.eyecolor=eyecolor;
        },
        ...
    };
    
    您将在助手属性中检索
    person

    缺点是您必须为每个person\u助手管理person对象。但这不是一个大问题。

    在我看来,创造一个个人助手并不是一个好主意。相反,您应该创建一个Person原型,阅读了解更多信息


    您应该有Name和Alive等成员,并且可以根据您的需求实现您的函数。

    您必须在助手中添加函数,并使用parent function变量

    var person_helper = function(person) {
        var parent = this;
        this.name = person.name ;
        this.isHisNameIs = function(name) {
            if(name == parent.name)
                console.log('OK');
            else
                console.log('NOP');                    
        }
    }
    

    我同意其他人的说法,这些方法应该是
    person
    对象的一部分。我想这会更有意义

    但为了好玩,您想要的东西与underline.js提供的东西类似。所有方法都可以用函数的方式调用,但也可以包装一个对象/数组,以面向对象的方式调用这些方法

    为此,您必须将
    person\u helper
    定义为一个函数,将这些方法分配给它的原型并作为静态方法分配给它自己:

    var person_helper = (function() {
    
        var methods = {
           isAlive : function(person) {},
           isHisNameIs : function(person,name) {},
           isSeniorCitizen : function(person) {}
        };
    
       var Helper = function(person) {
           if(!(this instanceof Helper)) { // so we can call the function with `new`
               return new Helper(person);    
           }
           this.person = person;
       };
    
       // set up instance and static methods
       for(var m in methods) {
           (function(m) { // instance methods setup
                Helper.prototype[m] = function() {
                     // call the original method, passing `this.person` as
                     // first argument
                     return methods[m].apply(null, [this.person].concat(arguments));
                };
            }(m));
    
           Helper[m] = methods[m]; // static method
       }
    
       return Helper;
    }());
    
    然后您可以将其用作:

    person_helper.isHisName(person, 'Dan');
    person_helper(person).isHisName('Dan');
    

    继续您的示例,使用:

    使用jdk8的版本运行此命令:

    您还可以选择将person\u helper()的结果作为对象处理,以避免重新构造:

    var personObj = person_helper(person_object);
    personObj.isAlive();    
    personObj.isHisNameIs("Dan"); 
    personObj.isSeniorCitizen();
    

    为什么不将这些方法添加到person类中呢?您可能仍然想去了解为什么w3schools不是您想要使用的最佳参考。当然,使用prototype是处理这些内容的最佳方法。但有时人们不想为做最简单的事情而头疼,也不想因为缺乏知识或永恒的愚蠢匆忙而在应用程序中添加依赖项。如果你愿意,我可以引用selfhtml.org。没想到我刚刚在你提供的网站上读到了关于W3学校的信息。
    some guy is alive 
    some guy name is Dan
    some guy is getting on in age..
    
    var personObj = person_helper(person_object);
    personObj.isAlive();    
    personObj.isHisNameIs("Dan"); 
    personObj.isSeniorCitizen();