对Javascript设计模式的原型模式介绍(object.create和原型)

对Javascript设计模式的原型模式介绍(object.create和原型)
原型模式描述
描述:使用原型实例复制和创建新的和可定制的对象;新对象不需要知道原始对象创建的具体过程;

过程:原型= >新protoexam = >克隆到新的对象;

使用相关代码:
复制代码代码如下所示:

函数原型(){

this.name =;

this.age =;

this.sex =;

}

prototype.prototype.userinfo =函数(){

返回个人信息,姓名:+ +这个名字+,年龄:+ +这个年龄+,性别:+ +;

}
现在您需要两个或更多个人信息内容:
复制代码代码如下所示:

新原型();

甲= object.create VaR(原);

person1.name =肖明;

person1.sex =男性;

person1.age = 35;

person1.userinfo();
var 2 = object.create(原);

person2.name =Xiaohua;

person2.sex =女性;

person2.age = 33;

person2.userinfo();
输出返回:
复制代码代码如下所示:

个人信息,姓名:肖明,年龄:35,性别:男

个人信息名称:Xiaohua,年龄:33性别:女性
原型模式通常用于抽象结构,但其内容几乎相同。可以自定义抽象内容。新的创作只需对原始对象稍加修改即可达到要求。
object.create使用说明
1 >。定义:创建一个对象,该对象可以指定原型对象,并且可以包含可选的自定义属性。

2 > object.create(原{,};可选属性),设置新对象的属性;
复制代码代码如下所示:

1。为了创建一个新对象的原型,必须为null;这个原始的如果创建的{新}或对象原型是有价值的;

2。属性:可选,结构为:

{

propfield:{

价值:('val| { } { } |功能),

可写的:真正的|假,

枚举:真正的|假,

配置:真正的|假,

获取:函数(){返回10 },

设置:函数(值){ }

}

}

自定义属性具有以下四个属性:

值:自定义属性值;

写:该项的值是可编辑的,默认的是虚假的,当它是真的,obj.prodfield可以分配;否则,只读;

可以枚举枚举;

confirurable:可配置;

它也可以包括设置,get访问器方法;

其中,{集和}不能同时显示值和可写。
1。创建原型对象类:

复制代码代码如下所示:

函数的ProtoClass(){

这一组'protoclass;

这个;

此函数=(){

}

}
创建一个原型方法:

复制代码代码如下所示:

protoclass.prototype.amethod =函数(){



此(b);

把这个还给我;

}
使用方法

1。创建一个对象protoclass.prototype;

复制代码代码如下所示:

var obj1 = object.create(protoclass.prototype,{

福:{价值:'obj1 ',可写:true}

})
Obj1 has a method of ProtoClass prototyping, aMethod.

复制代码代码如下所示:

obj1.amethod();

将 /输出定义的访问,protoclass无法访问成员
但这种方法不执行成员A,B和C的属性,在ProtoClass:

2。使用实例化protoclass为原型:

复制代码代码如下所示:

VaR原=新ProtoClass();

var obj2 = object.create(原,{

福:{价值:'obj2}

});
这创造了obj2的所有protoclass、成员属性,B,C,和一种原型方法;并添加foo只读数据属性;

复制代码代码如下所示:

obj2,; / / protoclass

obj2。C: / / {物}

(obj2。B); / /

obj2.amethod(); / / protoclass

obj2.foo; / / obj2
三.子类继承:

复制代码代码如下所示:

函数子类(){
}

subclass.prototype = object.create(protoclass.prototype,{

福:{价值:'subclass}

});

subclass.prototype.submethod =函数(){

这一this.foo | |返回;

}
这种方法可以被继承的方法和执行的一种protoclass;

复制代码代码如下所示:

新子类();

Func.aMethod(); / /未定义,无法读取的protoclass、成员属性A,B,C

Func.subMethod(); / /子类
让子类来读取protoclass成员属性,子类是可以改变的:

复制代码代码如下所示:

函数子类()

{

protoclass.call(本);

}

其他代码;
这种方法可以获取该成员属性和方法protoclass原型;

复制代码代码如下所示:

新子类();

Func.aMethod(); / / protoclass

Func.subMethod(); / / protoclass
另一种方法是使用一个实例化的protoclass对象为原型的子类;

复制代码代码如下所示:

VaR原=新ProtoClass();

函数子类(){

}

subclass.prototype = object.create(原,{

福:{价值:'subclass}

});
当类被实例化时,所有属性和protoclass原型方法可以得到,和一个只读的数据属性,foo,创建。

复制代码代码如下所示:

新子类();

func.foo; / /子类

功能。一个; / / protoclass

(函数B);

Func

Func.aMethod(); / / protoclass
4。创建继承附加方法相同的成型效果object.create使用实例化的ProtoClass:

复制代码代码如下所示:

函数子类(){

this.foo = 'subclass '; / /但我能读和写

}

subclass.prototype =新ProtoClass();
object.create相关描述
object.create是用来创建一个新对象,当对象原型空新的(对象),并一致或{ };

当功能,效果,新函数名相同;

复制代码代码如下所示:

1对象

var

等效

VaR O2 = object.create({ });

两个构造函数;

/ / -----------------------------------------

函数(){

这一组'func;

}

func.prototype.method =函数(){

把这个还给我;

}

无功newfunc =新的功能();

等效{效果} /

无功newfunc2 = object.create(对象。原型 / *功能。原型| |函数(){ { } * /。

一:{价值:'func ',可写:true},

方法:{值:函数(){返回此};}

});
但newfunc和newfunc2不同于函数引用,创建自己的对象。

newfunc是函数func(){…},和newfunc2是函数{本地}

复制代码代码如下所示:

object.create(原propertiesfield {,}):
普罗托解释该值是必需的,可以是null,如果没有设置,就会抛出一个异常。

原型是非空的,也就是说,已经实例化的值,即新的值。Javascript中的大多数对象都有构造函数属性,它指示通过哪个函数实例化哪个对象。

propertiesfield是选择集的成员属性或方法,新创建的对象可能需要;

tag:设计模式原型原型模式电脑软件Javascript

相关内容