清清白白的亮了

一、面向过程和面向对象的分别、联系

1.面向过程编程:注重解决问题的步调,分析问题亟待的每一步,实现函数依次调用。

2.面向对象编程:注重问题中的对象,分析问题中目的的联络,实现目标间的报导解决问题.面向对象编程淡化过程,强调对象
更靠近大家人通常处理问题的法子。

3.面向过程:所有机能都是在急需利用的时候才开发,相当于去旅馆点菜,现点现做,需要等。

4.面向对象:在专业开发从前,就先把具备需要利用的机能都付出好,并以属性或者措施的格局存放

在一个对象中,在事实上开支的时候依照需要来调用写好的职能。相当于去快餐店吃快餐,菜都是

先行已经炒好的,去了就足以吃。


凌晨五点,天又要亮了。

二、什么是目的?什么是面向对象?

1.对象是类的实例。对象是现实性的东西。

2.唯有对象才有性能和方法,基本数据类型没有,string等连串能够利用的章程来自她自个儿的构造器,在着力数据类型调用方法时会临时创办一个目的出来,在点子成功时自动销毁。

3.对象,黑盒子,是一个一体化,对外提供一些操作,不打听其中的结构,知道表面的各样操作(按钮)。

4.面向对象简单的来说就是:不打听原理的状态下,会使用效用。面向对象是一种通用思想,并非只有编程中能用,任何事情都可以用。

5.面向对象编程也叫OOP,特点:①虚无,抓住主旨问题,把最关键的、跟问题有关的特性抽出来。②封装:不考虑之中贯彻,只考虑效用使用。简单说:就是看不到里面的东西,用好表面的功效。③延续(遗传):从已有对象上,继承出新的对象。多重继承。多态。从父类上前仆后继出部分艺术、属性,子类,又有局部要好的特性。多重继承:可以而且继续多种父级的特色

6.目的的组成:①措施–函数:过程、动态的②属性–变量:状态、静态的。

7.变量和性能的不等:变量是即兴的,不属于任什么人。属性是有归属的,属于一个对象的。

//定义一个对象

//直接量

//var obj={};

//使用Object讲明对象

var  obj= new   Object();

//覆盖式的定义形式,

var    person={

name:”张三”,

age:”18″,

hobby:function() {

console.log(“我欢喜篮球”);

}

}

//前面的会覆盖前面的

//var person = {

//name: “李四”

//}

//追加属性和形式

person.height=”178cm”;

console.log(person)

//调用

person.hobby();

console.log(person.name);

自家不爱好天亮,天亮就代表要起来。我这一身老病的筋骨,起床仍能做什么样?

对象数组,一个数组里面有多个目的

var  phoneNumber=[{

name:”coco”,

tel:”132432432″

}, {

name:”popo”,

tel:”5840583″

}]

//取到里面的事物

//console.log(phoneNumber[0].name)

自身怎么着也做不了,还要人伺候。腿站不住,最多靠撑架子拐才能勉强挪几步。吃饭连碗都端不起来,老把汤勺往鼻子上送,诶,真是废了!

//固然数据比较多,需要用循环

for  (var  i=0; i<phoneNumber.length;i++){

console.log(phoneNumber[i].name);

}

var   person={

name:”张三”,

height:”189cm”

}

还不如天别亮,就让我在黑黢黢的夜间里直接这样躺着、睡着、想着、梦着,只记忆过去,不必看今朝、想将来……

//获取对象里面的事物,假若数额相比多,也足以循环

//key下标         value值

for(var  k   in   person) {

console.log(k);//对象的下标

console.log(person[k]);//获取单个值

}


曾经自己是那么健康,我的腿很长,在高校读书时也终究运动健将,百米短跑、1英里中长跑没人能比的上本身。我不大爱好足球,可篮球馆上怎能少得了自我!

三、工厂格局

并不常用,每一遍调用函数都重复定义了函数,(函数重复,资源浪费)

//工厂情势

function    factory(name,age) {//类

var   obj={};

obj.name=name;

obj.age=age;

obj.hobby=function() {

console.log(“sing”);

}

return     obj;

}

//间接调用

factory().hobby();//sing

//用参数接收调用

var     newFactory=factory(“张三”,”18″);//对象

newFactory.hobby();

console.log(newFactory.name);

//不用传参,用arguments,如若参数不确定的动静下,就用arguments

function   factory() {

//console.log(arguments);

var   obj={};

obj.name=arguments[0];

obj.age=arguments[1];

obj.hobby=function() {

console.log(“sing”);

}

return   obj;

}


幸而自己在篮架下那么勇敢,要不孩子他妈能么会爱上我,人家不过男生们一个个流着口水想要勾搭的班花。

四、构造函数

//创设构造函数,类似于类

function Student(name,sex){

//属性

this.name = name;

this.sex = sex;

//方法

this.intro = function(){

alert(“姓名:” + this.name + “\n” + “性别:”+this.sex);

}

}

这但是个傻班花,她不知底用这资源去挖金掏矿,只一心想着借各个理由把自家给拴上。其实自己有什么样好的,长的也不帅,学习也不冒尖儿,除了个子一米八二,能跑会打球,就没哈可以在女孩子面前值得骄傲的了。

动用构造函数

//创制对象

var student = new Student(“张三”,”男”);

//调用方法

student.intro();

可他偏偏爱上了我,说什么样阳光、大气、温柔、潇洒,我才十几岁,傍晚八九点钟的阳光,能不阳光嘛,有病哟难道?

构造函数:用来构建对象的函数。

咋样叫豁达?不跟别人计较算一个,不跟老师顶嘴算一个,或许,任她学习、放学、走哪到哪对自身围追堵截行为都坚定不移忍受、不愠不火也算一个。

注意:1.为了区别一般函数,构造函数的函数名首字母规定相应为大写。2.构造函数必须接纳new运算符来调用执行(实例化对象)。3.在构造函数里面写属性,在原型里面写方法


这就是说亲和的原故恐怕与上条看似,至少,在她后边自己连连逆来顺受从不抗拒,不是少数也不想,而是不敢,不敢看她美妙的眸子里浸满泪滴。

五、原型

1.经过new实例化出来的目的,其属性和行事来源于于五个部分,一部分来自于构造函数,另一有些来自于原型.

2.当我们讲明一个类时,其实同时生成了一个遥相呼应的原型.例如我们定义Person这些类时,会暴发一个与Person类对应的原型prototype.

要说潇洒,这只是他情人眼中出男漂亮的女人,我觉得自己一点都不自然,相反还有人讲一些傲慢,对不喜欢的人和事情嗤之以鼻,理都不理,所以也时不时会显现出我行我素、孤傲不羁的姿态。想不到,这一个旁人眼里的各种不是,到了他那边,一鼓脑儿地全都变成了引发她的亮点!

3.原型自我就是一个对象。

4.通过prototype可以针对这么些原型,原型可以经过constructor指向Person类(构造函数).

function  Dog(){//构造函数

       this.name=”大黄”;

        this.sex=”公”;

}

Dog.prototype={//原型

      bark:function(){

      alert(“汪汪~”);

         }

}

//也得以这么写

//通过构造函数找到原型

Car.prototype={

action1:function() {

console.log(“我是形式1”)

},

action2:function() {

console.log(“我是办法2”)

},

}

//原型

//Car.prototype.action = function() {

//console.log(“我是原型里的不二法门”);

//}

function  Person() {

this.arr=[1,2,3];

}

//通过原型可以取到构造函数里面的东西

Person.prototype.hobby=function() {

console.log(this.arr);

}

var   newPerson= newPerson();

newPerson.hobby();


不禁美色诱惑,扛不住死缠滥打,在高中毕业这年的前多少个月,我就那么那么不堪地缴械投降,拜倒在班花的粉拳香吻之下。

六、原型链

1.原型链:原型链是指目的在走访属性或措施时的寻找方法。

2.当造访一个目标的特性或艺术时,会先在目的自我上探寻属性或情势是否存在,假设存在就动用对象自我的习性或措施。如若不设有就去创制对象的构造函数的原型对象中查找
,依此类推,直到找到截止。假诺到顶层对象中还找不到,则赶回 undefined。

3.原型链最顶层为 Object 构造函数的 prototype 原型对象,给
Object.prototype 添加属性或方法可以被除 null 和undefined
之外的保有数据类型对象使用。


新兴,再后来,她从来都尚未辜负自己对她的好,不仅替自己生了娃,养到大,还吃尽千辛万苦精心把持这些家。现目前,孩子学成出去做大事,本该老俩口一起快乐、健健康康地安度晚年,也让自家有时光可以回报一下我们的班花。

七、公有和个人

1.在传统的面向对象的语言中一般会提供public、protected、private等重要字来声称属性和艺术的

公开性.

2.javascript中尚无这一个重要字,我们透过效用域来贯彻国有如故私有。

functionWomen(name,sex){

//公有属性

this.name=name;

this.sex=sex;

//私有属性

var_age=”30″;

//公有方法

this.eat=function(){

alert(“”);

}

//私有方法

var  fight=function(){

alert(“!”);

}

}

可谁承想,这老了老了,肢体上的零部件说极度就老大,说出故障它就出起了故障。这下可好,我的老龄计划从倒下第一天就从头暂停,这么一搁就是一切三年。

对此上述例子中,使用this.xxx定义的习性和艺术是国有的,我们在外表使用对象很容举行访问.

这三年来,我无奈阳光,除了大口出气、小口进气、做人也迫于大气,随着身体越来越差,脾气也更为大,除了暴躁,还哪有点儿的平易近人?这时候如若再说潇洒,那简直就是天大的笑话!

行使 var xxx定义的属性和艺术是私家的.只可以在构造函数内部举办直接访问.

嗳,班花呀班花,我知道您的劳动,也心知肚明你的不利。本来我想趁孩子大了、出去了,我们一视同一律新风流、再一次潇洒着让旁人嫉妒,不过我的大长腿不争气,我胸口里的机件不给力,我这老骨头……对不住你啊!

set方法:我们可以通过国有的章程去拜访私有的属性.我们把给专门给个体属性赋值的艺术称为set方法

六点半,天真的亮了……

get方法:大家把特别获取个人属性的法子称为get方法

function     Women(name){

      this.name=name;

      var     _age=”30″;

      //set方法

    this.setAge=function(age){

         _age=age;

     }

}

function    Women(name){

      this.name=name;

     var_age=”30″;

     //get方法

    this.getAge=function(){

        return     _age;

    }

}


                                             (注:题图取自网络)

八、继承

1.后续的目标是找到类之间的共性,精简代码。

2.原型无法直接被接续

//解决持续中原型的传址问题

function    Dad() {

this.name=”杨幂”;

this.age=18;

}

Dad.prototype.hobby=function() {

console.log(“电视”);

}

function    Son() {

this.name=”小糯米”;

Dad.call(this);

}

//成立一个新的靶子就会新引用一个地方

Son.prototype= newDad();

Son.prototype.hobby=function() {

console.log(“肉肉”);

}

var      newDad= new   Dad();

newDad.hobby();


九、改变this指向

//上面二种方法可以转移this指向

var   o={

name:”张三”,

age:”18″

}

function  test(name,age) {

 console.log(this);

}

//这时候this指向window

//test();

//通过call改变函数内部的this指向

//这时候this指向o

//test.call(o)

var    o={

name:”张三”,

age:”18″

}

function   test(name,age) {

console.log(“姓名”+name+”年龄”+age)

console.log(this);

}

//test.call(o,”张三”,18)

//test.apply(o,[“李四”,36]);//第二个参数需要的是一个数组

//test.bind(o)(“王五”, 21);


十、传值和传址

传址:复杂的数据类型就会提到到传址问题

传值:简单的数据类型,(一个大概的变量就是简简单单的多寡)

//传值

var  a=10;

var   b=a;

var    b=5;

console.log(a)//10

//传址

var  arr1=[1,2,3,4];

var   arr2=arr1;

arr2[1]=5;

console.log(arr1);//[1,5,3,4]

//传址

var   obj1={

name:”coco”,

age:18

};

var   obj2=obj1;

obj2.age=10;

console.log(obj1)//{name:”coco”,age:10}

//传址造成的题目案例

function   Dad(height) {

this.name=”王健林”;

this.height=height;

this.money=”$88888888888″;

this.hobby=function() {

console.log(“太极”);

}

}

//js面向对象里面的继续,原型是不会被延续的

Dad.prototype.fun=function() {

console.log(“高尔夫”);

}

functionSon(height) {

this.name=”王思聪”;

//继承(就一定于把this指向的函数加到Dad里面)

//Dad.call(this, height);

//Dad.apply(this, [height]);

Dad.bind(this)(height);

}

//解决不可能继续原型的问题

//这种艺术,造成了五个fun的地址是在一块,改变一个,另一个也会被更改,传址

Son.prototype=Dad.prototype;

Son.prototype.fun=function() {

console.log(“泡妞”);

}

var   newDad= new    Dad();

newDad.fun();//泡妞


十一、深拷贝(克隆)

1.JSON.stringify()  将 [] 或 {} 的目的转换成字符串形式的值,就是编码

2.JSON.parse()  将字符串形式的 [] 或 {} 值转换成对象,就是解码

3.克隆兑现原理:利用字符串赋值为传值的表征,先将对象转换成字符串格局,然后将字符串形式的值再转换成对象。

4.兼容问题:不帮助低版本IE浏览器

//解决传址问题

//深拷贝,克隆

var   obj1={

name:”coco”,

age:18

};

//编码json数据

//var _json = JSON.stringify(obj1);

//console.log(_json)

//console.log(typeof  _json) //string

//解码json串

//var obj2 = JSON.parse(_json);

//console.log(obj2);

//用深拷贝解决传址问题

var     obj2=JSON.parse(JSON.stringify(obj1));

obj2.age=13;

console.log(obj1);


十二、typeof的不足

typeof
可以精确地认清出简约数据类型,但对复杂数据类型的论断相对相比模糊。

例如: 数组对象 \ 时间对象 \ 正则目的 \ Math对象等都回去的是
‘object’。

优化方案:封装函数
function type( obj ){

var o = {};

return o.toString.call(obj).slice(8,-1).toLowerCase();

}

实现原理:Object 对象的 prototype 的 toString()方法会再次回到一个表示对象自我类型的字符串。