JS划重点——类和对象的不正经阐述
2024-08-25 03:18:16
JS划重点——类和对象的不正经阐述
/在JS 类里面函数也是一个对象,那么要创建一个对象就需要一个类,这个类可以由这个对牛逼的对象-函数来实现/
/首先是普罗大众都会的 工厂模式来创建一类/
function creates(name,sex,age,b) {
var w = new Object;
w.name = name;
w.sex = sex;
w.age = age;
w.single = b;
w.show = function(){
for (prop in w) {
console.log("w." + prop + " = " + w[prop]);
}
}
return w ;
}
var w1 = creates('啊港','男',21,true)
var w2 = creates('啊财','男',20,false)
w1.show()
w2.show()
/这种方式创建的对象很不好,每次执行都会有一个show函数被创建,可以这样写来解决对各show函数的问题/
function showinfor(){
for (prop in this) {
console.log(this+"." + prop + " = " + this[prop]);
}
}
function creates(name,sex,age,b) {
var w = new Object;
w.name = name;
w.sex = sex;
w.age = age;
w.single = b;
w.show = showinfor
return w ;
}
var w1 = creates('啊港','男',21,true)
var w2 = creates('啊财','男',20,false)
w2.show()
w1.show()
/但看起来就特别别扭,这个show函数一点也不像是对象里面所包含的方法,这就出现了JS的构造函数来解决/
function creatW(name,sex,age,b) {
this.name = name;
this.sex = sex;
this.age = age;
this.single = b;
this.show = function(){
alert(this.name+"使用了构造函数来创建对象")
};
}
var w1 = new creatW('啊港','男',21,true)
w1.show()
/现在可以用new 运算符来创建对象了,里面用的是this,不需要return对象,but 但是这种方式每个对象的shou函数也是不同的和工厂模式同父异母/
/来,邀请原型方式出场/
function w () {
}
w.prototype.name='啊港'
w.prototype.sex='男'
w.prototype.show=function(){
alert(this.name+'使用了原型创建对象')
}
var w1 = new w()
w1.show()
/这种方式每个函数创建的对象都会公用里面的属性和方法,但是使用这种方式不能给函数传参来初始化参数,所以构造加原型模式出场/
function w (name,sex,age,b) {
this.name = name;
this.sex = sex;
this.age = age;
this.single = b;
}
w.prototype.show=function(){
alert(this.name+'使用了构造加原型创建对象')
}
var w1 = new w('啊港','男',21,true)
w1.show()
/这种方式是目前最流行欢迎的创建对象的方式之一,还有一种动态原型创建模式/
function w (name,sex,age,b) {
this.name = name;
this.sex = sex;
this.age = age;
this.single = b;
if(typeof w._initialized == 'undefined'){
w.prototype.show=function(){
alert(this.name+'使用了动态原型创建对象')
}
w._initialized=true
}
}
var w1 = new w('啊港','男',21,true)
w1.show()
var w2 = new w('啊财','男',21,true)
w2.show()
/initialized判断是否给已经给原型赋予了任何方法如果没有就创建,然后赋值为true,之后就不会创建show方法/
最新文章
- 微信jsApI及微信分享对应在手机浏览器的调用总结。
- BZOJ4182 : Shopping
- A Tour of Go Struct Fields
- VS下 dllimport与dllexport作用与区别
- EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
- [Unity UGUI]UGUI提供多种不同的解决方案
- Java数据持久层框架 MyBatis之API学习一(简介)
- Day7 小练习(统计初始化数据的次数和对象之间的交互)
- iBATIS 传MAP处理方式(value是list的方式)
- Xcode9,cocoaPod执行pod install时报错,一行命令即可解决。
- Visual C++ 6.0对任意三个数字进行排序
- 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
- python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)
- 第三篇:jmeter的作用域和执行顺序
- jsp el函数库
- Emacs矩形操作
- WAJUEJI which home strong!nyoj
- cordova 整合 webpack vue
- 纯CSS实现立方体旋转
- es6数组去重复
热门文章
- 模拟7题解 T2visit
- Spring MVC JSON自己定义类型转换
- windows上安装Anaconda和python的教程详解
- Windows10 +Ubuntu 18.04双系统安装详细教程
- node.js的path模块
- HTML-DOM常用对象的用法(select/option/form/table)
- 大数据ETL详解
- 使用 Swift 构建自定义的ActivityIndicator View
- Java练习 SDUT-3337_计算长方体、四棱锥的表面积和体积
- 利用backtrace和ucontex定位segment错误