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))代码>