首頁 > web前端 > js教程 > Javascript物件導向篇 (一)

Javascript物件導向篇 (一)

黄舟
發布: 2017-02-07 14:30:57
原創
915 人瀏覽過

1  表達式的概念

廣義的概念:所有返回的一段代碼塊,都可以成為表達式.比如:

var a=0;var a, b;
a = 0;这个表达式的返回值为0;
b = a;这个表达式的返回值为a;
登入後複製

賦值表達式的返回值為=右邊的值;


2  面向對象的概念:

一種程式設計思想.核心:在解決任何問題的時候,首先試圖去找到一個物件來幫助解決問題.

優點:

身份:調度者;

程式碼的靈活度高;

可維護性高;

可擴展性高;


缺點:

可能造成程式碼的複雜度提高

可讀性相對差執行者

順序: 一般情況下不能打亂,從上至下一步一步執行.

4  Javascript語言的特徵:

弱型別

:多範式,一切都是物件


基於原形的語言

5  原型的概念

所謂原型形就是一個函數的prototype屬性所引用的對象

rr

只要聲明一個函數,那麼當原型就存在那麼當原型透過該函數創建出來的每一個物件,都共享此原型,也就是說上述創建出來的所有物件可以直接存取原型上的任何成員(屬性和方法);

(物件的動態特性就是物件可以同過.或[]來動態建立物件);


6  原型的本質

原型的本質就是物件

function foo(){};
foo.prototype['name']='ksir';
var f = new foo();
console.log(f.constructor ===foo.prototype.constructor);
登入後複製

在建構函式中存在相同的邏輯程式碼,然後再建立物件的時候,會拷貝該函數中的程式碼邏輯,把構造函數內的方法提取出來放在一個公共的地方,這個公共的地方是該構造函數創建出來的對像都能訪問,–構造函數的所有對象能夠共享構造函數的原型。

優點:實現同類物件的資料共享

7  取得原型的方式


透過函數:

function Person(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
    this.talk = function(){
        console.log('hello');
     }
 }
 var kangfeng = new Person('小强',21,'男');
 var xiaoming = new Person('小明',20,'女');
 var xiaohong = new Person('小红','19','女');
 kangfeng.talk();
 xiaoming.talk();
 xiaohong.talk();
 //思考:这三个儿女的talk方法是否一样?
 console.log(xiaoming.talk === kangfeng.talk);
 console.log(xiaohong.talk === xiaohong.talk):
 //这三个对象的方法是不一样,相互独立的
 Person.prototype.addfu(){
    console.log('给原型添加一个函数');
}
登入後複製

透過物件:

<fnName>.prototype;
登入後複製

 

8一個對像都有__proto__屬性,也就是說每一個對像都有原型

object.__proto__;
//两个下划线
登入後複製

對象的類型就是構造函數的名字


9  原型屬性&原型對象

原型屬性:站在函數的角度,原型可以稱為該函數的原型屬性

原型物件:站在物件的角度,原型可以稱為該物件的原型物件

10 __proto__雙下劃線標準


_這種雙底線的標準不是w3c的標準,這些屬性都是非標準屬性。

有相容性問題。如果我們無法透過雙底線取得原型屬性的時候,我們就得透過函數來取得它 

Math.__proto__===object.prototype;
登入後複製

11  標準建構函數的寫法//哪些屬性要保存在構造函數的內部,哪些屬性需要提取出來放放原型上

function getPrototype(obj){
    //判断浏览器是否兼容__proto__属性
    //return !!obj.__proto__? obj.__proto__:obj.constructor.prototype;
    if(obj.__proto__){
    //支持
        return obj.__proto__;
    }else{
        //获取该对象的构造函数
        //在通过此函数的prototype属性获取其原型对象
        return obj.constructor.prototype;
    }
}
function A(){};
var a = A();
console.log(getPrototype(a).constructor);
//如果我们的函数中有if else return结构,我们可以用3元运算符来优化.
登入後複製

12  注意點

給構造函數添加方法一般添加在原型上,為了方便,一般將方法以對象的形式添加到.prototype{}>.prototype{} ,同時,不要忘了加入constructor: 建構函數名 鍵值對形式。

13  原型的特性

動態性:

給原型擴充成員會直接反應到已建立的物件身上

替換原型物件不會反應到已建立的物件之後創建出來的物件

唯一性

由同一函數創建出來的所有物件,共享同一個原型物件

不可變性:

物件是無法改變原型物件上的任何成員


繼承性:

物件是無法改變原型物件上的任何成員

繼承性:物件都繼承自它的原型物件


以上就是Javascript物件導向篇(一)的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板