在javascript中使用正确的函数创建对象帮助器
我计划在我的js中创建这样的对象帮助器:在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);
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\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();