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方法/

最新文章

  1. 微信jsApI及微信分享对应在手机浏览器的调用总结。
  2. BZOJ4182 : Shopping
  3. A Tour of Go Struct Fields
  4. VS下 dllimport与dllexport作用与区别
  5. EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
  6. [Unity UGUI]UGUI提供多种不同的解决方案
  7. Java数据持久层框架 MyBatis之API学习一(简介)
  8. Day7 小练习(统计初始化数据的次数和对象之间的交互)
  9. iBATIS 传MAP处理方式(value是list的方式)
  10. Xcode9,cocoaPod执行pod install时报错,一行命令即可解决。
  11. Visual C++ 6.0对任意三个数字进行排序
  12. 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
  13. python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)
  14. 第三篇:jmeter的作用域和执行顺序
  15. jsp el函数库
  16. Emacs矩形操作
  17. WAJUEJI which home strong!nyoj
  18. cordova 整合 webpack vue
  19. 纯CSS实现立方体旋转
  20. es6数组去重复

热门文章

  1. 模拟7题解 T2visit
  2. Spring MVC JSON自己定义类型转换
  3. windows上安装Anaconda和python的教程详解
  4. Windows10 +Ubuntu 18.04双系统安装详细教程
  5. node.js的path模块
  6. HTML-DOM常用对象的用法(select/option/form/table)
  7. 大数据ETL详解
  8. 使用 Swift 构建自定义的ActivityIndicator View
  9. Java练习 SDUT-3337_计算长方体、四棱锥的表面积和体积
  10. 利用backtrace和ucontex定位segment错误