js和其他語言不同,沒有class的概念,要想形成物件導向,就必須依靠他自身乙個非常重要的概念,也是不好理解的乙個東西。那就是原型prototype,使用他可以模擬繼承和類的實現。下面先看乙個簡單的例子:
function
person
(name)
person.prototype =
}var zhang = new person("zhangsan");
console.log(zhang.getname());
執行結果:zhangsan
有兩種繼承方式,原型式繼承,建構函式式繼承
原型鏈繼承,看下面這個例子:
function
child
() function
parent
() child.prototype = new parent();//child繼承parent,通過原型,形成鏈條
var test = new child();
console.log(test.age);
console.log(test.name);
兩個函式用prototype形成鏈條,形成了繼承。
下面看看這個原型式繼承
function obj (o) ;
f.protype = o;
return
new f();
}var box = ;
var b1 = obj(box);
console.log(b1.name);
b1.name = 'mike';
console.log(b1.name);
console.log(b1.arr);
b1.arr.push('parents');
console.log(b1.arr);
var b2 = obj(box);
console.log(b2.name);
console.log(b2.arr);
//原型式繼承首先在obj()函式內部建立乙個臨時性的建構函式,然後將傳入的物件作為這個建構函式的原型,最後返回這個臨時型別的乙個新例項
//寄生組合式繼承
function
obj(o) ;
f.prototype = o;
return
new f();
}function
create
(parent,test)
function
parent
(name)
parent.prototype.run = function
() ;
function
child
(name,age)
inheritprototype(parent,child);//通過這裡實現繼承
var test = new child('trigkit4',21);
test.arr.push('nephew');
console.log(test.arr);
console.log(test.run());//只共享了方法
var test2 = new child('jack',22);
console.log(test2.arr);//引用問題解決
依靠原型式的繼承,中用new 操作符產生的物件,會向上查詢,查詢他原型鏈上的屬性,這樣就實現了繼承,如果刪除本物件上的屬性,是不會影響到父型別屬性的。
物件把函式當作方法的時候,this指向的就是那個物件。
1.全域性作用域
2.函式作用域
3.evel作用域
我在學習js繼承的時候,看了好多資料,但是發現根本記不住,我只有把其中的幾個理解下來,在圖後面更多的。現在我先縷一縷:要物件導向,那得先有物件,物件可以通過工廠模式還有建構函式模式等產生出來,也可以通過原型模式產生,有了物件之後就可以實現物件導向的重要特性,繼承,這裡我只掌握的原型模式的繼承,就比如我上面舉的例子,每個物件都有乙個prototype我把他指向另外乙個函式,這樣就實現了從這個函式到那個函式的繼承,因為每個物件都是object的例項,所有每個物件都有tostring和valueof這些方法。
說的如果有不對的,懇請大家指正、
javascript 學習筆記之物件導向程式設計
物件特殊屬性 資料屬性和訪問器屬性 1 資料屬性 configurable 是否可刪除 enumerable 是否可列舉for in writable 是否可寫 value 值 要修改預設屬性必須使用defineproperty object,key,descriptor 方法 例如 var per...
JavaScript物件導向
方法一 建構函式法 function cat cat.prototype.showname function var cat new cat cat.name tom cat.showname tom 它用建構函式模擬 類 在其內部用this關鍵字指代例項物件。類的屬性和方法,還可以定義在建構函式的...
javaScript物件導向
code 類lecture構造器 使用兩個字串函式,name和teacher function lecture name,teacher 類lecture的方法,生成乙個顯示該課程資訊的字串 lecture.prototype.display function 類schedule的構造器 使用乙個l...