js繼承 原型
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding:0;}
.head{font-size:12px;padding:6px 0 0 10px;}
#login_box{width:300px;height:150px;background:#eee;
border:1px solid #ccc;position:absolute;left:50%;top:50%;margin-left:-150px;margin-top:-75px;display:none;}
#login_box p{height:20px;border-bottom:1px solid #ccc;font-size:12px;padding:6px 0 0 5px;font-weight:bold;}
#close{width:14px;height:14px;background:url(close.png) no-repeat;position:absolute;right:4px;top:6px;cursor: pointer;background-color: red;}
</style>
<!--<script>
window.onload=function(){
var login_btn=document.getElementById('login'),
login_box=document.getElementById('login_box'),
close=document.getElementById('close');
}
function addEvent(ele,type,hander){
}
function showLogin(){
if(ele.addEventListener){
ele.addEventListener(ele,type,hander)
}
else if(ele.attachEvent){
ele.attachEvent('on'+type,hander)
}
else{
ele['on'+type]=hander;
}
}
</script>-->
</head>
<body>
<div class="head">親,您好!<input type="button" value="登 錄" id="login"></div>
<div id="login_box">
<p>用戶登錄</p ><span id="close">關閉</span>
</div>
<script>
var person = {
age:26,
name:'wang',
say:function (num) {
console.log ("my name is "+this.age+",my name is "+this.name+'.');
//console.log ("my name is "+person.age+",my name is "+person.name+'.');
console.log("傳進一個參數:"+num);
}
}
/*
* 上面那個對象 有三個屬性 age name say
* 有一個屬性是方法 如 say
* 如果我們想讀他的age屬性 直接console.log(person.age);
* 如果我們要添加一個新的屬性 如job person.job = "coder";
* if we want to change the property(age),just as : person.age = 29;
* 對於第三個Say 裏面用到了this 這個關鍵字,以後會單講,在這裏你可以理解成 this 就是person 這個對象 但是不建議直接用person
*
* 問題來了:設置person一個新屬性 其爲一個方法,這個方法存一個數字的參數,這個參數爲你想設定的年齡。將person的年齡修改掉,
* 修改後再 調用 person的say 方法。
* */
//person.say(5);
/*
* 以上知識點
* 對象 對象屬性的修改 對象方法的調用 對象中的this 函數參數
* */
function Person(option) {
this.age = option.age;
this.name = option.name;
this.say = function () {
console.log ("my name is "+this.age+",my name is "+this.name+'.');
//console.log ("my name is "+person.age+",my name is "+person.name+'.');
}
}
var person = new Person({age:18,name:'wang'});
person.say();
//爲什麼我們不如下寫?
function Person1(age,name) {
this.age = age;
this.name = name;
this.say = function () {
console.log ("my name is "+this.age+",my name is "+this.name+'.');
//console.log ("my name is "+person.age+",my name is "+person.name+'.');
}
}
/*
* 你可以想如果有非常多的參數名稱,而我們又忘了參數的順序
* */
var person2 = new Person1('wang',18);
person2.say();//這會輸出什麼?你會發現 name 與 age 賦值給反掉了;而用對象則不存在這個問題
//但是如果用對象,我們想給他加一個默認值該怎麼做呢?
function Person3(option) {
option = option || {};
this.age = option.age || 99;
this.name = option.name || 'congjun';
this.say = function () {
console.log ("my name is "+this.age+",my name is "+this.name+'.');
//console.log ("my name is "+person.age+",my name is "+person.name+'.');
}
}
var person3 = new Person3();
person3.say();//你自己測試一下會輸出什麼?
/*
* 注意 || 這是一種 一元判斷 拿 option = option || {};
* 來說 對於等號右邊 如果option存在,就把option 賦值給等號左邊的option 如果不存在 則把{}賦值給等號左邊的option
* */
/*
* 上面的函數叫構造函數
* 函數名首字母要大寫;使用的時候 前面要加一個new關鍵字
* 構造函數內的this 指向構造函數本身
* 普通 函數呢?指向window
*
* 我們可以這個樣子定義一個對象 var a = new Object(); 也可以 var a = {};
* 我們可以這個樣子定義一個數組 var a = new Array(); 也可以 var a = [];
* 我們可以這個樣子定義一個日期 var a = new Date(); 等等
*
* 雖然我們編程中 都採用後者,因爲比較簡單
* 但是你要知道,他們其實都是由構造函數而來
*
* var a = new Object();拿這句來說,a 與 new Object()之間有什麼關係呢?
* a 是 new Object()實例化
*
* 注意如下的表述
*
* a 會有一個__proto__屬性 而構造函數會有一個 prototype屬性
* a 的__proto__ 會繼承 其構造函數的 prototype屬性
* 以上是最簡單的對象繼承。
* 但事情遠沒有結束
*
* 因爲a 的構造函數 有可能會是 某個構造構造函數的 實例
* 而某個構造函數 還可能是其它構造函數的實例
* 這個樣子一層層的存在一個繼承關係
* 最頂端是什麼呢?
* 那就是Object對象,到Object 就結束了
* 層層的繼承像鏈一樣,我們叫原形鏈
* 必須完全搞懂原型繼承及原型鏈的定義。
*
* */
//第三天的題目 用構造函數的方法把第二天的題目做出來z
//主要是this 原型 與 原型鏈h
/*
* 再補充一點
*
* */
function Student() {
this.age = 55;
this.teacher = 'JS';
this.major = 'math';
}
Student.prototype.coderName = "congjun";
var student = new Student();
console.log(student.coderName);//這個coderName屬性就是繼承而來的
//下面的代碼,要理解,對於for in循環不用特別關注,但是功能還有有一些重要
for(var i in student){
console.log("所有屬性包含繼承:"+i);
if(student.hasOwnProperty(i)){
console.log("本身自有屬性:"+i);
}
}
</script>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.