面向对象的封装和继承
1。封装
js封装中有许多实现,它们都是常用的。
1.1原始模式生成对象
将我们的成员直接写入对象并用函数返回它。缺点:很难看到模式的示例。
代码uff1a
复制代码代码如下所示:
函数Stu(名称,得分){
返回{
姓名,
评分:评分
}
}
VaR学生1 =斯图(张三
无功stu2 =斯图(李四
console.log(学生1。名称); / /张三
1.2代结构模式对象
js帮助我们提供一个构造函数来构建对象模型,所谓的构造函数实际上是一个普通函数,但是这个变量的内部使用。当新关键字用于生成构造函数的实例时,这个变量被绑定到实例对象。
直接在代码上:
复制代码代码如下所示:
函数Stu(名称,得分){
this.name =名称,
this.score =得分
}
VaR学生1 =新斯图(张三
无功stu2 =新的学生(李四
console.log(stu1.name + stu2.score + / / / );张三90
Console.log((stu1.constructor = = STU)+/+(stu2.constructor = = STU); / /真实)
(console.log(学生1是斯图)+/+(stu2是斯图)); / /真实
不难看出,JS的构造函数生成对象和C #生成的类。使用模板通过新键定义对象成员都是实例化的。
生成的C代码相同的研究对象#
复制代码代码如下所示:
班学生
{
公用字符串名;
公开双得分;
}
好了,这里是基本的对象,所以现在我们需要一个方法,所有对象都是通用的,只允许创建一次这个方法,如果不重复创建对象,你会怎么做我们都知道,我们可以在C #使用静态成员,那么你在做什么吗
1.3原型模式
在JS,每个构造函数的原型属性和对象的所有属性和方法都是由构造函数实例继承。然后我们添加成员直接原型声明静态成员在C #等效。
代码uff1a
复制代码代码如下所示:
函数Stu(名称,得分){
this.name =名称,
this.score =得分
}
斯图。原型类型=‘';
stu.prototype.log =函数(){
console.log(S);
}
VaR学生1 =新斯图(张三
无功stu2 =新的学生(李四
console.log(stu1.type + stu2.type + / / / );学生
stu1.log(你好); / /你好
console.log(stu1.log = = stu2。日志); / /真的
封装在这里。让我们看看js中继承是如何实现的。
2。继承
2.1构造函数约束
电话或申请方法直接调用的子函数,和父对象的构造函数是绑定到子对象。
复制代码代码如下所示:
函数Stu(名称,得分){
Grade.apply(这个参数);
/ / grade.call(这个观点);
this.name =名称,
this.score =得分
}
函数级(){
this.code =初中;
this.ask =函数(){
console.log(大家好);
}
}
VaR学生1 =新斯图(张三
无功stu2 =新的学生(李四
console.log(学生1。代码); / /初中
(学生1。问); / /你好
在这里,应用程序做两件事,将第一个参数给这个等级构造函数(调用者),然后在类中执行代码。
2.2通过原型继承
先看代码
代码uff1a
复制代码代码如下所示:
函数Stu(名称,得分){
this.name =名称,
this.score =得分
}
函数级(){
this.code =初中;
}
stu.prototype =新的年级();
stu.prototype.constructor = / /预防研究;产业链紊乱,手动复位的声明
VaR学生1 =新斯图(张三
无功stu2 =新的学生(李四
console.log(Stu。原型。构造函数); / /自己的构造函数
console.log(学生1。代码); / /初中
如前所述,原型C #相当于一个静态成员,所以我们把父类的所有成员到自己的静态成员开展传承。
通过原型继承的缺点是:所有继承的成员都是静态的,那么如何继承对象成员呢
2.3份遗产
父对象的所有属性和方法都复制到子对象中进行继承。
代码uff1a
复制代码代码如下所示:
函数Stu(名称,得分){
this.name =名称,
this.score =得分
}
函数(等级){ }
grade.prototype.code =初中;
}
函数包
函数扩展(c,p){
var p = p.prototype;
var c = c.prototype;
对于(var i){
c {我} = { } };
}
}
扩展(学生,年级);
VaR学生1 =新斯图(张三
无功stu2 =新的学生(李四
学生1。代码=高学校;
console.log(学生1。代码); / /高中
console.log(stu2。代码); / /初中
console.log(Stu。原型。构造函数);
console.log(等级。原型。构造函数)
这里写的是JS面向对象的排序规则,这个东西是不一样的。使用时会根据你的需要而改变,一个字很好,右边是最好的。
这里我们只分析封装和继承。稍后,我们将做一些其他的文章,以便我们的合作伙伴对Javascript面向对象编程有更深入的了解。当然,这是个人的理解,如果有遗漏,请与我联系。