实际上,有几种方法可以用JavaScript创建对象。当您只想创建一个对象时,使用“ new ”运算符创建“ 基于构造函数 ”的对象没有任何好处。这与使用“ 对象文字 ”语法创建对象相同。但是,当您考虑“ 原型继承 ” 时,使用“ new ”运算符创建的“ 基于构造函数 ”的对象将变得不可思议地使用。您不能维护使用文字语法创建的对象的继承链。但是您可以创建一个构造函数,将属性和方法附加到其原型。”运算符,它将返回一个对象,该对象可以访问该构造函数的原型附带的所有方法和属性。
这是使用构造函数创建对象的示例(请参见底部的代码说明):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
现在,您可以通过实例化Person构造函数来创建任意数量的对象,所有这些对象都会从该对象继承fullname()。
注意:“ this ”关键字将引用构造函数中的一个空对象,每当您使用“ new ”运算符从Person中创建一个新对象时,它将自动返回一个包含所有带有“ this ”关键字的属性和方法的对象。这些对象肯定会继承Person构造函数的原型附带的方法和属性(这是此方法的主要优点)。
顺便说一句,如果要使用“ 对象文字 ”语法获得相同的功能,则必须在所有对象上创建fullname(),如下所示:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
最后,如果您现在问为什么我应该使用构造函数函数方法而不是对象文字方法:
***原型继承允许一个简单的继承链,这可能是非常有用和强大的。
***它通过继承构造函数实例中定义的通用方法和属性来节省内存。否则,您将不得不在所有对象中一遍又一遍地复制它们。
我希望这是有道理的。
a = new Object
,a = new Object()
,a = {}
,文字更简单,一些测试,我跑前一阵子,说这是更快,更新的编译器可能导致我的发言是假的。同样适用于文字数组