javascript写类方式之四
JavaScript 方式 之四 写类
2023-06-13 09:14:10 时间
4、构造函数+原型直接组装一个类;同一构造函数将组装出同一类型
通过前面几篇得知javascript写类无非基于构造函数和原型。既然这样,我们写个工具函数来写类。
复制代码代码如下:
通过前面几篇得知javascript写类无非基于构造函数和原型。既然这样,我们写个工具函数来写类。
/**
*$class写类工具函数之一
*@param{Object}constructor
*@param{Object}prototype
*/
function$class(constructor,prototype){
varc=constructor||function(){};
varp=prototype||{};
c.prototype=p;
returnc;
}
嗯。工具类写好了,来组装下:用构造函数来生成类实例的属性(字段),原型对象用来生成类实例的方法。
//构造函数
functionPerson(name){
this.name=name;
}
//原型对象
varproto={
getName:function(){returnthis.name},
setName:function(name){this.name=name;}
}
//组装
varMan=$class(Person,proto);
varWoman=$class(Person,proto);
ok,这时候已经得到了两个类Man,Woman。并且是同一个类型的。测试如下:
console.log(Man==Woman);//true
console.log(Man.prototype==Woman.prototype);//true
创建对象看看,
varman=newMan("Andy");
varwoman=newWoman("Lily");
console.log(maninstanceofMan);//true
console.log(womaninstanceofWoman);//true
console.log(maninstanceofPerson);//true
console.log(womaninstanceofPerson);//true
ok一切如我们所期望。但是有个问题,下面代码的结果输出false,
console.log(man.constructor==Person);//false
这让人不悦:从以上的代码看出man的确是通过Man类new出来的varman=newMan("Andy"),那么对象实例man的构造器应该指向Man,但为何事与愿违呢?
原因就在于$class中重写了Person的原型:c.prototype=p;
好了,我们把$class稍微改写下,将方法都挂在构造器的原型上(而不是重写构造器的原型),如下:
function$class(constructor,prototype){
varc=constructor||function(){};
varp=prototype||{};
//c.prototype=p;
for(varatrinp)
c.prototype[atr]=p[atr];
returnc;
}
相关文章
- 【说站】JavaScript原型继承的实现方式
- JavaScript 匿名函数几种执行方式[通俗易懂]
- 【JavaScript】原型与原型链
- 尝试使用 JavaScript 写脚本来辅助记忆单词(也是一种单词记忆方式的构想)
- JavaScript学习总结(十六)——Javascript闭包(Closure)详解编程语言
- 浅谈javascript中的三种输出方式详解编程语言
- 一实用的实现table排序的Javascript类库
- JavaScript中的事件处理
- javascript输入框提示列表效果
- JavaScript入门教程Cookies
- 讨论javascript(一)工厂方式js面象对象的定义方法
- javascript三种编解码方式
- JavaScript保存数组到Cookie的代码
- JavaScript联动的无限级封装类,数据采用非Ajax方式,随意添加联动
- Javascript异步加载详解(浏览器在javascript的加载方式)
- Javascript页面模板化很多人没有使用过的方法
- JavaScript实现网页图片等比例缩放实现代码及调用方式
- 基于JavaScript实现获取鼠标点击位置坐标的方法
- 使用javascript为网页增加夜间模式
- JavaScript中for-in遍历方式示例介绍
- 使用JavaScript判断图片是否加载完成的三种实现方式
- JavaScript中使用document.write向页面输出内容实例
- JavaScript中的console.profile()函数详细介绍
- JavaScript访问CSS属性的几种方式介绍
- javascript数组输出的两种方式
- JavaScript数值转换的三种方式总结
- JavaScript插件化开发教程(四)