Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 jquery从对象创建原型_Javascript_Jquery_Prototype - Fatal编程技术网

Javascript jquery从对象创建原型

Javascript jquery从对象创建原型,javascript,jquery,prototype,Javascript,Jquery,Prototype,我想在创建原型时有点作弊 比如说 var person = { name: 'John', age: 110, gender: 'm', ... }; var employee = new Person(person); function Person(args) { $.each(args, function(key, value) { this[key] = value; // Cannot create property 'key' on nu

我想在创建原型时有点作弊

比如说

var person = {
   name: 'John',
   age: 110,
   gender: 'm',
   ...
};

var employee = new Person(person);

function Person(args) {
   $.each(args, function(key, value) {
      this[key] = value; // Cannot create property 'key' on number
   });
}

console.log(employee.age);
在PHP中,这可以像

function __construct() {
    $args = func_get_arg(0);            
    foreach ($args as $key => $value) {
        $this->$key = $value;
    }
    return $this;
}

jQuery代码中的问题是“this”实际上在jQuery的每个作用域中,因此要实际创建新实例的原型,需要执行以下操作:

function Person(args) {
    var _this = this;
   $.each(args, function(key, value) {
      _this[key] = value;
   });
}
您也可以在不使用jQuery的情况下实现这一点:

 function Person(args) {
    for(var key in args){
        this[key] = args[key];
     }
 }

jQuery代码中的问题是“this”实际上在jQuery的每个作用域中,因此要实际创建新实例的原型,需要执行以下操作:

function Person(args) {
    var _this = this;
   $.each(args, function(key, value) {
      _this[key] = value;
   });
}
您也可以在不使用jQuery的情况下实现这一点:

 function Person(args) {
    for(var key in args){
        this[key] = args[key];
     }
 }
问题是“这”指的是每个职能部门,而不是实际的人员 您可以将其更改为箭头功能,这样可以正常工作

var-person={
姓名:'约翰',
年龄:110,
性别:'m',
...
};
var员工=新员工(人);
职能人员(args){
$.each(args,(key,value)=>{//更改为箭头函数以将其保持在同一范围内
此[key]=value;//无法在数字上创建属性“key”
});
}
console.log(employee.age)问题是“这”指的是每个功能,而不是实际的人
您可以将其更改为箭头功能,这样可以正常工作

var-person={
姓名:'约翰',
年龄:110,
性别:'m',
...
};
var员工=新员工(人);
职能人员(args){
$.each(args,(key,value)=>{//更改为箭头函数以将其保持在同一范围内
此[key]=value;//无法在数字上创建属性“key”
});
}

console.log(employee.age)使用
bind
获取正确的范围

function Person(args) {
   $.each(args, function(key, value) {
      this[key] = value; 
   }.bind(this)); //Use bind for getting the right scope
}

使用
bind
获取正确的范围

function Person(args) {
   $.each(args, function(key, value) {
      this[key] = value; 
   }.bind(this)); //Use bind for getting the right scope
}

那么这里的问题是什么呢。你希望我们做什么?您期望的解决方案是什么?分配这个[key]=值不起作用。我想用对象创建一个人,而不是创建这样的东西:var employee=newperson(Person.name、Person.age、Person.gender等);和职能人员(姓名、年龄、性别等)this.name=姓名等。那么这里的问题是什么。你希望我们做什么?您期望的解决方案是什么?分配这个[key]=值不起作用。我想用对象创建一个人,而不是创建这样的东西:var employee=newperson(Person.name、Person.age、Person.gender等);函数Person(name,age,gender,…)this.name=name等可能会补充说,这与OP的PHP版本之间的区别在于PHP版本使用循环而不是回调函数(因此没有范围问题)。太棒了!谢谢。请注意,箭头函数可能会导致兼容性问题:或者只使用
bind(this)
$。每个(args,function(key,value){this[key]=value;}.bind(this))
可能会补充说,这与OP的PHP版本的区别在于PHP版本使用循环而不是回调函数(因此没有范围问题)。太棒了!谢谢。请注意,箭头函数可能会导致兼容性问题:或者只使用
bind(this)
$。每个(args,function(key,value){this[key]=value;}.bind(this))