bob*_*obo 54 javascript oop object
例如,我已经在代码中的某处有这个对象,它是一个通用对象:
var person1={lastName:"Freeman",firstName:"Gordon"};
Run Code Online (Sandbox Code Playgroud)
我有一个Person对象的构造函数:
function Person(){
this.getFullName=function(){
return this.lastName + ' ' + this.firstName;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有一个简单的语法允许我们将person1转换为Person类型的对象?
A1r*_*Pun 42
@PeterOlson的答案可能会在当天恢复,但看起来好像
Object.create
已经改变了.我会像@ user166390在评论中所说的那样去复制构造函数.
我对这篇文章进行了暗示是因为我需要这样的实现.
现在我们可以使用Object.assign
(@SayanPal解决方案)和ES6语法:
class Person {
constructor(obj) {
obj && Object.assign(this, obj);
}
getFullName() {
return `${this.lastName} ${this.firstName}`;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
const newPerson = new Person(person1)
newPerson.getFullName() // -> Freeman Gordon
Run Code Online (Sandbox Code Playgroud)
ES5回答如下
function Person(obj) {
for(var prop in obj){
// for safety you can use the hasOwnProperty function
this[prop] = obj[prop];
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var newPerson = new Person(person1);
console.log(newPerson.getFullName()); // -> Freeman Gordon
Run Code Online (Sandbox Code Playgroud)
使用较短的版本,1.5衬垫:
function Person(){
if(arguments[0]) for(var prop in arguments[0]) this[prop] = arguments[0][prop];
}
Run Code Online (Sandbox Code Playgroud)
没有.
但是,如果你正在寻找把你的person1
对象,就好像它是一个Person
,你可以调用方法Person
上的原型person1
有call
:
Person.prototype.getFullNamePublic = function(){
return this.lastName + ' ' + this.firstName;
}
Person.prototype.getFullNamePublic.call(person1);
Run Code Online (Sandbox Code Playgroud)
虽然这显然不适用于Person构造函数内部创建的特权方法 - 就像您的getFullName
方法一样.
这不完全是一个答案,而是分享我的发现,并希望得到一些支持/反对它的批判性论据,因为具体来说我不知道它的效率如何。
我最近需要为我的项目执行此操作。我这样做是使用Object.assign
,更确切地说是做这样的事情:Object.assign(new Person(...), anObjectLikePerson)
。
这是我的JSFiddle 的链接,也是代码的主要部分:
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.getFullName = function() {
return this.lastName + ' ' + this.firstName;
}
}
var persons = [{
lastName: "Freeman",
firstName: "Gordon"
}, {
lastName: "Smith",
firstName: "John"
}];
var stronglyTypedPersons = [];
for (var i = 0; i < persons.length; i++) {
stronglyTypedPersons.push(Object.assign(new Person("", ""), persons[i]));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
79807 次 |
最近记录: |