数码资讯
在js中创建对象的几种方法的示例
Javascript中的一切都是一个对象:字符串、数组、值、函数等等,js中没有类概念。 但是我们可以使用js的语法特性来创建类的对象。 原始的方法 复制代码代码如下所示: var obj =新的对象(); obj.name =曲; / /属性添加到一个对象 obj.age = 21; (obj.s
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
Javascript中的一切都是一个对象:字符串、数组、值、函数等等,js中没有类概念。
但是我们可以使用js的语法特性来创建类的对象。
原始的方法
复制代码代码如下所示:
var obj =新的对象();
obj.name =曲; / /属性添加到一个对象
obj.age = 21;
(obj.showname =功能){ / /添加对象的方法
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
Obj.showName(); / /曲
Obj.showAge(); / / 21
上面的方法通过新关键字生成一个对象,然后根据js的属性作为动态语言添加属性和方法。
创建一个对象,这是表示方法的对象。
这样的问题是,如果需要多次创建对象,则需要多次重复代码,而不是重用代码。
工厂方法
复制代码代码如下所示:
功能createobj(){
var obj =新(对象); / /创建对象
obj.name =曲;
obj.age = 21;
obj.showname =函数(){
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
返回对象; / /返回对象
}
var obj1 = createobj();
var obj2 = createobj();
obj1.showname(); / /曲
obj2.showage(); / / 21
此方法改进代码重用、更改工厂方法,并引入参数分配。
复制代码代码如下所示:
功能createobj(姓名,年龄){ / /结构对象的初始化参数可以通过
var obj =新(对象); / /创建对象
obj.name =名称;
obj.age =年龄;
obj.showname =函数(){
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
返回对象; / /返回对象
}
var obj1 = createobj(曲
var obj2 = createobj(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
上述方法可以提高代码的可重用性,但与面向对象的概念相比,存在较大的缺陷。
对象的属性是私有的,对象的方法是共享的,而上面的工厂方法为每个对象创建一个对象。
对象创建自己的私有方法。同时,由于为每个对象创建相同的逻辑方法,这是对内存的浪费。
复制代码代码如下所示:
功能createobj(姓名,年龄){
var obj =新(对象); / /创建对象
obj.name =名称;
obj.age =年龄;
obj.showname = showName;
obj.showage = showage;
返回对象; / /返回对象
}
功能(showName){ / /作为一个函数对象
警报(这个名字);
}
功能showage(){
警戒(这个年龄);
}
var obj1 = createobj(曲
var obj2 = createobj(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
通过定义一个函数对象,解决了由不同对象保存函数对象的私有问题。
一个包含上述两个函数的引用,但以这种方式,对象的函数是独立的,与对象无关。
特定对象的特定方法在某一特定类中的观点并不一致。
构造函数的方法
复制代码代码如下所示:
/ /定义一个构造函数,用于java构造函数生成相应的对象,类比
功能人(姓名,年龄){
当调用新的人/人时,在执行第一行代码之前,将MR放入一个人对象中,并将对象存储在内存中。
分配给该关键字的索引,这可以生成新对象这个关键字操作,如添加以下属性或方法
this.name =名称; / /这个关键词不能少。对当前对象的引用的对象的name属性的值,该关键字
实际上等于为当前对象添加name属性,然后它的name属性赋值。
this.age =年龄;
(this.showname =功能){ / /当前对象的方法
警报(这个名字);
}
this.showage =函数(){
警戒(这个年龄);
}
当前对象变量将返回到赋值符号的左边(不显式使用返回)
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
构造函数与工厂方法相同,为每个对象创建一个独占函数对象。当然,这些函数也可以使用。
对象在构造函数之外定义,以便对象和方法彼此独立。
原型方法:该方法使用的对象的原型属性
复制代码代码如下所示:
脚本类型文本>
函数(人)定义构造函数,不能传递参数。
该方法的所有属性都给出了原型属性。
person.prototype.name =曲; / /添加属性
Person.prototype.age = 22;
(person.prototype.showname =功能){ / /添加
警报(这个名字);
}
person.prototype.showage =函数(){
警戒(这个年龄);
}
var obj1 =新的(人); / /创建一个Person对象
var obj2 =新的人();
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /曲
obj2.showage(); / / 22
当生成人对象时,将原型的属性分配给新对象,然后共享属性和方法。
这个方法的问题是构造函数不能被引用,每个新生成的对象都有一个默认值。
任何问题,但财产共享是一个问题,当属性是一个可以改变状态的对象时。
复制代码代码如下所示:
函数(人)定义构造函数,不能传递参数。
person.prototype.age = 22;
person.prototype.array =新的阵列(曲
person.prototype.showage =函数(){
警戒(这个年龄);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
var obj1 =新的(人); / /创建一个Person对象
var obj2 =新的人();
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj2.showarray(); / /曲,罗,Kyo
在上面的代码中添加一个元素通过obj1 obj1属性的数组,对obj2 ARRA属性的元素也跟着元素。
原因是该obj1和obj2对象数组的属性是指同一个对象数组,然后将数组
对象,对数组对象的属性的其他引用自然会受到影响。
混合构造函数/原型模式
使用构造函数定义对象的属性,并使用原型(原型)来定义对象,这样就可以完成属性。
私有和方法共享。
复制代码代码如下所示:
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
this.array =新的阵列(曲
}
person.prototype.showname =函数(){
警报(这个名字);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj1.showname(); / /曲
obj2.showarray(); / /曲:罗
obj2.showname(); / /罗
属性是私有的之后,更改每个属性的属性不会影响其他对象,同时,该方法也由不同的对象共享,
这符合面向对象编程的要求。
动态原型方法
复制代码代码如下所示:
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
this.array =新的阵列(曲
如果在_initialized /未定义的人的对象,表明该方法尚未添加到人物原型
如果(类型的人。_initialized = =未定义)
{
person.prototype.showname =函数(){
警报(这个名字);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
的人。_initialized = true; / /设置为true,不添加方法的原型
}
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj1.showname(); / /曲
obj2.showarray(); / /曲:罗
obj2.showname(); / /罗
此方法与构造函数/原型相同,只需将方法添加到构造函数中并同时构建它。
属性被添加到函数中,以确保if语句只能成功执行一次。
在实际应用中应用最广泛的是构造函数/原型方法,动态原型技术也很流行,它是功能性的和结构化的。
函数/原型方法是等价的,不要单独使用构造函数或原型方法。
但是我们可以使用js的语法特性来创建类的对象。
原始的方法
复制代码代码如下所示:
var obj =新的对象();
obj.name =曲; / /属性添加到一个对象
obj.age = 21;
(obj.showname =功能){ / /添加对象的方法
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
Obj.showName(); / /曲
Obj.showAge(); / / 21
上面的方法通过新关键字生成一个对象,然后根据js的属性作为动态语言添加属性和方法。
创建一个对象,这是表示方法的对象。
这样的问题是,如果需要多次创建对象,则需要多次重复代码,而不是重用代码。
工厂方法
复制代码代码如下所示:
功能createobj(){
var obj =新(对象); / /创建对象
obj.name =曲;
obj.age = 21;
obj.showname =函数(){
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
返回对象; / /返回对象
}
var obj1 = createobj();
var obj2 = createobj();
obj1.showname(); / /曲
obj2.showage(); / / 21
此方法改进代码重用、更改工厂方法,并引入参数分配。
复制代码代码如下所示:
功能createobj(姓名,年龄){ / /结构对象的初始化参数可以通过
var obj =新(对象); / /创建对象
obj.name =名称;
obj.age =年龄;
obj.showname =函数(){
警报(这个名字);
}
obj.showage =函数(){
警戒(这个年龄);
}
返回对象; / /返回对象
}
var obj1 = createobj(曲
var obj2 = createobj(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
上述方法可以提高代码的可重用性,但与面向对象的概念相比,存在较大的缺陷。
对象的属性是私有的,对象的方法是共享的,而上面的工厂方法为每个对象创建一个对象。
对象创建自己的私有方法。同时,由于为每个对象创建相同的逻辑方法,这是对内存的浪费。
复制代码代码如下所示:
功能createobj(姓名,年龄){
var obj =新(对象); / /创建对象
obj.name =名称;
obj.age =年龄;
obj.showname = showName;
obj.showage = showage;
返回对象; / /返回对象
}
功能(showName){ / /作为一个函数对象
警报(这个名字);
}
功能showage(){
警戒(这个年龄);
}
var obj1 = createobj(曲
var obj2 = createobj(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
通过定义一个函数对象,解决了由不同对象保存函数对象的私有问题。
一个包含上述两个函数的引用,但以这种方式,对象的函数是独立的,与对象无关。
特定对象的特定方法在某一特定类中的观点并不一致。
构造函数的方法
复制代码代码如下所示:
/ /定义一个构造函数,用于java构造函数生成相应的对象,类比
功能人(姓名,年龄){
当调用新的人/人时,在执行第一行代码之前,将MR放入一个人对象中,并将对象存储在内存中。
分配给该关键字的索引,这可以生成新对象这个关键字操作,如添加以下属性或方法
this.name =名称; / /这个关键词不能少。对当前对象的引用的对象的name属性的值,该关键字
实际上等于为当前对象添加name属性,然后它的name属性赋值。
this.age =年龄;
(this.showname =功能){ / /当前对象的方法
警报(这个名字);
}
this.showage =函数(){
警戒(这个年龄);
}
当前对象变量将返回到赋值符号的左边(不显式使用返回)
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /罗
obj2.showage(); / / 21
构造函数与工厂方法相同,为每个对象创建一个独占函数对象。当然,这些函数也可以使用。
对象在构造函数之外定义,以便对象和方法彼此独立。
原型方法:该方法使用的对象的原型属性
复制代码代码如下所示:
脚本类型文本>
函数(人)定义构造函数,不能传递参数。
该方法的所有属性都给出了原型属性。
person.prototype.name =曲; / /添加属性
Person.prototype.age = 22;
(person.prototype.showname =功能){ / /添加
警报(这个名字);
}
person.prototype.showage =函数(){
警戒(这个年龄);
}
var obj1 =新的(人); / /创建一个Person对象
var obj2 =新的人();
obj1.showname(); / /曲
obj1.showage(); / / 22
obj2.showname(); / /曲
obj2.showage(); / / 22
当生成人对象时,将原型的属性分配给新对象,然后共享属性和方法。
这个方法的问题是构造函数不能被引用,每个新生成的对象都有一个默认值。
任何问题,但财产共享是一个问题,当属性是一个可以改变状态的对象时。
复制代码代码如下所示:
函数(人)定义构造函数,不能传递参数。
person.prototype.age = 22;
person.prototype.array =新的阵列(曲
person.prototype.showage =函数(){
警戒(这个年龄);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
var obj1 =新的(人); / /创建一个Person对象
var obj2 =新的人();
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj2.showarray(); / /曲,罗,Kyo
在上面的代码中添加一个元素通过obj1 obj1属性的数组,对obj2 ARRA属性的元素也跟着元素。
原因是该obj1和obj2对象数组的属性是指同一个对象数组,然后将数组
对象,对数组对象的属性的其他引用自然会受到影响。
混合构造函数/原型模式
使用构造函数定义对象的属性,并使用原型(原型)来定义对象,这样就可以完成属性。
私有和方法共享。
复制代码代码如下所示:
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
this.array =新的阵列(曲
}
person.prototype.showname =函数(){
警报(这个名字);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj1.showname(); / /曲
obj2.showarray(); / /曲:罗
obj2.showname(); / /罗
属性是私有的之后,更改每个属性的属性不会影响其他对象,同时,该方法也由不同的对象共享,
这符合面向对象编程的要求。
动态原型方法
复制代码代码如下所示:
功能人(姓名,年龄){
this.name =名称;
this.age =年龄;
this.array =新的阵列(曲
如果在_initialized /未定义的人的对象,表明该方法尚未添加到人物原型
如果(类型的人。_initialized = =未定义)
{
person.prototype.showname =函数(){
警报(这个名字);
}
person.prototype.showarray =函数(){
警报(这个数组);
}
的人。_initialized = true; / /设置为true,不添加方法的原型
}
}
var obj1 =新的人(曲
var obj2 =新的人(罗
obj1.array.push(京); / /添加一个元素到obj1数组属性
obj1.showarray(); / /曲,罗,Kyo
obj1.showname(); / /曲
obj2.showarray(); / /曲:罗
obj2.showname(); / /罗
此方法与构造函数/原型相同,只需将方法添加到构造函数中并同时构建它。
属性被添加到函数中,以确保if语句只能成功执行一次。
在实际应用中应用最广泛的是构造函数/原型方法,动态原型技术也很流行,它是功能性的和结构化的。
函数/原型方法是等价的,不要单独使用构造函数或原型方法。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。