js之面向对象
本文的面向?qū)ο蠓譃镋S6和ES6之前的,重點(diǎn)學(xué)習(xí)ES6的
===============================
一、面向?qū)ο?/strong>
1、什么是面向?qū)ο?br /> a)什么是對(duì)象:萬(wàn)物都可以抽象成對(duì)象
時(shí)間對(duì)象
var oDate=new Date();(我們經(jīng)常var的oDate就是一個(gè)時(shí)間對(duì)象)
oDate.getFullYear();(新建的oDate就繼承了Date里面的所有方法)
數(shù)組
var arr=new Array();
arr.sort();
arr.length;
json{
name:'aa',
showName:function(){
alert(1);
}
}
json.name;(json對(duì)象的屬性)
json.showName();(json對(duì)象的方法)
b)面向?qū)ο笫且环N思想:
我們只關(guān)心怎么去用,不關(guān)心里面是怎么實(shí)現(xiàn)的
提高了效率
2、怎么去面向?qū)ο?br /> a)先要有一個(gè)對(duì)象
對(duì)象都有特征,都有屬性和方法
屬性 屬性就是變量,只不過(guò)他有依附關(guān)系
特征?變量 自由的,獨(dú)立的
方法 就是函數(shù),只不過(guò)他有依附關(guān)系
函數(shù) 獨(dú)立的
b)造對(duì)象
1、var arr=[];
批量造對(duì)象
c)構(gòu)造函數(shù):用來(lái)造對(duì)象的函數(shù),構(gòu)造函數(shù)也是函數(shù),只是因?yàn)橛猛径妹?為了和普通函數(shù)做區(qū)別,首字母大寫(xiě)就是構(gòu)造函數(shù)
d)this 想要學(xué)好面向?qū)ο?必須知道this指向誰(shuí)
new是干什么的
1、會(huì)在構(gòu)造函數(shù)開(kāi)始的位置創(chuàng)建一個(gè)空對(duì)象(并且把this指向空對(duì)象);
2、自動(dòng)返回空對(duì)象
e)屬性不同的,方法是相同的
是ES6之前面向?qū)ο蟮暮诵?#xff1a;原型
f)面向?qū)ο笤趺磳?xiě): 構(gòu)造原型混合模式
1、構(gòu)造身上加屬性
2、原型身上加方法 prototype
function Person(name,age){
//添加屬性和方法
this.name=name;
this.age=age;
}
Person.prototype.showName=function(){
alert('我是舞王'+this.name);
};
g)prototype 也是對(duì)象
1、寫(xiě)面向?qū)ο笫菫榱藬U(kuò)展系統(tǒng)方法
h)arr.indexOf()
練習(xí)題:
時(shí)間對(duì)象里面 getDay 0-6 0星期天
getCnDay 星期一 --- 星期日
-----------------------------------
二、總結(jié):
1.什么是對(duì)象:
一切都是對(duì)象
2.什么是面向?qū)ο?#xff1a;
只關(guān)心怎么調(diào)用,不關(guān)心怎么實(shí)現(xiàn)的
3.怎么寫(xiě)一個(gè)類(lèi) 就是一個(gè)構(gòu)造函數(shù)
屬性加在構(gòu)造身上
方法加在原型身上
function Person(...){
this.XX=XXX //加屬性
}
Person.prototype.XXX=function(){}; //加方法
4.怎么去造一個(gè)對(duì)象
new 類(lèi)名()
eg var barry=new Person();(barry獲得person的屬性和方法)
5.new 都干了什么
1)、造一個(gè)空對(duì)象,并把this指向?qū)ο?br /> 2)、返回這個(gè)對(duì)象
6.prototype原型:
1)、可以寫(xiě)面向?qū)ο?br /> 2)、可以擴(kuò)展系統(tǒng)的方法
7.原型和原型鏈的區(qū)別
原型prototype 就是一個(gè)對(duì)象,存在于每個(gè)對(duì)象身上
原型鏈:就是因?yàn)橛衟rototype的存在,js產(chǎn)生了原型鏈
8.ECMAScript 里面的方法都是用原型寫(xiě)的
類(lèi) 在js里面類(lèi)就是構(gòu)造函數(shù)
實(shí)例 構(gòu)造函數(shù)調(diào)用完返回的對(duì)象
9.面向?qū)ο?-一種思想
10.面向?qū)ο蟮奶卣?#xff1a;
封裝 抽象了事物的核心
多態(tài) 一個(gè)事物可以繼承多個(gè)親屬的特征
繼承 事物得到了父親的一些特征
-----------------------------------
11.object
instanceof 檢測(cè)一個(gè)物體的血緣關(guān)系
子級(jí) instanceof 父級(jí) 返回true false
constructor 物體是由那個(gè)構(gòu)造器誕生的
子級(jí).constructor==父級(jí) 返回true false
包裝類(lèi)(是java里面的)
簡(jiǎn)寫(xiě)的數(shù)據(jù)類(lèi)型object不認(rèn)。
12.this 有優(yōu)先級(jí) 從上到下,優(yōu)先級(jí)變小
new object
定時(shí)器 window
事件 觸發(fā)事件的對(duì)象
對(duì)象 對(duì)象
show() window
13.繼承 子級(jí)繼承父級(jí)的功能
給父級(jí)一個(gè)功能,子級(jí)默認(rèn)就有
玩繼承:
屬性
在子級(jí)的構(gòu)造中,調(diào)用父級(jí)的構(gòu)造
function 子級(jí)(name,age){
//父級(jí).call(this,name,age);
父級(jí).apply(this,arguments);
}
方法
1、son.prototype=father.prototype;
問(wèn)題:子級(jí)改了父級(jí)也改變
2、for(var name in father.prototype){
son.prototype[name]=father.prototype[name];
}
問(wèn)題:孩子不認(rèn)爺爺
3、 子級(jí).prototype=new 父級(jí)();
問(wèn)題:子級(jí)的孩子不認(rèn)子級(jí)
終極版:子級(jí).prototype.constructor=子級(jí);
-----------------------------------------------
三、ES6
1.對(duì)象
let name='張三';
let json={
name,
showName(){
alert(this.name)
}
}
2.面向?qū)ο?br /> class Person{ //類(lèi)
constructor(name,age){ //構(gòu)造 屬性加在構(gòu)造身上
this.name=name;
this.age=age;
}
showName(){
alert(this.name);
}
showAge(){
alert(this.age);
}
}
3.繼承
class Student extends Person{
constructor(name,age,job){
super(name,age);//super在這里就是向上越級(jí)繼承父級(jí)的屬性
this.job=job;本身又加的屬性
}
showJob(){
alert(this.job);
}
}
-------------------------------------------------
ES6之前構(gòu)造函數(shù)里子級(jí)繼承父級(jí)的屬性
函數(shù)名.call(this的指向,參數(shù)。。。。)針對(duì)多個(gè)參數(shù)的情況,不確定數(shù)量
函數(shù)名.apply(this的指向,[參數(shù),參數(shù)。。。。]);
------------------
對(duì)象引用
js為了節(jié)省空間,采取的一種行為;
var arr=[1,2,3];
var arr2=arr;
------------------
for-in 通過(guò)對(duì)象的屬性進(jìn)行循環(huán)
用來(lái)循環(huán)對(duì)象的。但是能用for循環(huán)就不用for-in
for var i=0;i<10;i++
-------------------
json{
"a":"1",
"b":"2",
"c":"3"
}
?for(var v in json){
console.log(v);//打印出1,2,3
}
?
轉(zhuǎn)載于:https://www.cnblogs.com/barry1102/p/6955074.html
總結(jié)
- 上一篇: 2015-2016 ACM-ICPC S
- 下一篇: LA 6892 The Safe Sec