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

JS划重点——类和对象的不正经阐述的更多相关文章

  1. js中的类和对象以及自定义对象

    js中的类 1.类的声明 function Person(name,age){ this.name=name; this.age=age; this.test=function(a){ alert(a ...

  2. js中有关类、对象的增强函数

    javascript中继承的实现 基础实现 function Range(from,to){ this.from =from; this.to =to; } Range.prototype = { i ...

  3. js中的类数组对象---NodeList

    动态 NodeList 这是文档对象模型(DOM,Document Object Model)中的一个大坑. NodeList 对象(以及 HTML DOM 中的 HTMLCollection对象)是 ...

  4. js中对类和对象的理解

    类 :对一群具有相同特征的对象的集合的描述:对象:真实存在的对象个体: **面向对象,而不是面向类. 1.一切皆对象,继承靠原型链,多态靠弱类型,封装--虽然可以靠闭包,但我个人更推崇和python一 ...

  5. [JS]如何理解JS中的类和对象

    -------------------------------------------------------------------------------------------- 变量:自由的 ...

  6. 11-Js类和对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 浅谈js的类数组对象arguments

    类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ...

  8. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  9. JS创建类和对象

    JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活 ...

随机推荐

  1. bzoj 2705 [SDOI2012]Longge的问题——欧拉函数大水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2705 撕逼题.不就是枚举gcd==d,求和phi[ n/d ]么. 然后预处理sqrt (n ...

  2. python中接受任意关键字的参数

    1.*args args是非关键字参数,可以理解为形参,为了方便记忆我理解它是arguments的缩写. 2.*kwargs kwargs是键值对参数,为了方便记忆我理解它是key word argu ...

  3. 杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾”

    ylbtech-杨柳絮-Info:菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 1.返回顶部 1. 菏泽多措并举治理杨柳絮 5年内实现“有絮不成灾” 2019年04月09日 11:44  来源:大 ...

  4. Python数据分析与展示[第三周](pandas简介与数据创建)

    第三周的课程pandas 分析数据 http://pandas.pydata.org import pandas as pd 常与numpy matplotlib 一块定义 d=pd.Series(r ...

  5. Python 模块chardet安装过程(windows环境)

    最近需要一个txt文件的批量转码功能,在网上找到一段批量处理java源文件的py程序如下: #-*- coding: utf-8 -*- import codecs import os import ...

  6. 2019-11-12-WPF-添加窗口消息钩子方法

    title author date CreateTime categories WPF 添加窗口消息钩子方法 lindexi 2019-11-12 18:46:53 +0800 2019-06-05 ...

  7. 云数据库将进入企业级百万IOPS时代

    IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,以衡量存储每秒可接受多少次主机发出的访问.数据库,特别是关系型数据库由于需要处理 ...

  8. 【JZOJ4884】【NOIP2016提高A组集训第12场11.10】图的半径

    题目描述 mhy12345学习了树的直径,于是开始研究图的半径,具体来说,我们需要在图中选定一个地方作为中心,其中这个中心有可能在路径上. 而这个中心的选址需要能够使得所有节点达到这个中心的最短路里面 ...

  9. Python学习之路2☞数据类型与变量

    变量 变量作用:保存状态:说白了,程序运行的状态就是状态的变化,变量是用来保存状态的,变量值的不断变化就产生了运行程序的最终输出结果 一:声明变量 #!/usr/bin/env python # -* ...

  10. 使用UITextView的dataDetectorTypes实现超链接需要注意的事项!

    项目中需要在UITextView上识别URL,手机号码.邮箱地址等等信息.那么就用到了它的dataDetectorTypes属性.我的UITextView加在UITableViewCell上面的,当单 ...