JavaScript學習筆記

  • 1.常用數(shù)據(jù)類型:Nunnber String Array Date
  • 2.強制類型轉換方式 :
var a = "10";
var result = (Nunber) a + 1;
//可以將字符串開頭的幾個數(shù)字轉成int
var b = "12px";
parseInt(b)==>12

  • 3.關于boolean類型
    在js中NaN underfined 0這三個是數(shù)是false以外,其他的都是true。
  • 4.對象

function Person(name, age){
    //聲明屬性必須要用this
    this.name = name;
    this.age = age;
}
//對類屬性的調用可以通過對象點出來
var p1 = new Person("張三",12);
var name = p1.name
//或者對象["類屬性名稱"]
var age = pr["age"]

function fn(){
    alert("彈出框");
    return "100";
}

//將y變量指向整個函數(shù)fn,可以 通過x()來調用函數(shù)。
var x = fn;
//此時代表的是調用函數(shù)fn,并將它的返回值賦給y。
var y= fn();
var array = new Array(4, 11, 24, "5");
//刪除下標為2的后面的1個元素 并在刪除位置插入99,22兩個元素      
array.splice(2,1,99,22); //-->輸入結果為:4,11,99,22,5
            
  • 5.函數(shù)
//函數(shù)的參數(shù)和調用沒有關系,如果函數(shù)只有一個參數(shù),但是卻傳入了兩個參數(shù),僅僅只會匹配一個,所以JS中函數(shù)不存在重載,后面定義的函數(shù)會覆蓋前面定義的
function fn(num1,num2,){
    reutrn num1 + num2 + 1;
}
//調用返回 3
alert(fn(1,1,2));

function fn(num1){
    reutrn num1 + 1;
}
//調用返回 2
alert(fn(1,1,2));

//出了常用的定義類型,還可如下定義方式:
var fn1 = new Funcion("num1","num2","alert('結果:'+(num1+num2))");
fn1(11,22);//==>33
//-----------------------------------------華麗分割線---------------------------------------
//函數(shù)可以通過參數(shù)的方式傳入
function callFun(fun,arg){
    return fun(arg);
}

function say(arg){
    alert("Heool "+arg);
}
callFun(say,"張三");

//也可以通過返回值的方式返回
function fn1(num){
    var fn2 = function (arg){
           return num + arg;
     }
    return fn2;
}
var fn3 = fn1(100);
alert(fn3(1));//==>101
 //-----------------------------------------華麗分割線---------------------------------------
//arguments關鍵字,可以通過該關鍵字獲取相應屬性的參數(shù)值,這個屬性是一個數(shù)組,其實就是傳遞進來的參數(shù)
//arguments這個對象中有一個callee方法,可以反向調用函數(shù),實現(xiàn)函數(shù)名的解耦合
function fn1(num){
    if(num <= 1)  return 1;
    else return num * arguments.callee(num - 1);
}
//this: this關鍵字在調用時候回根據(jù)不同的對象變得不同
var name= "張三";
function hello(){
    alert(this.name+ "說:你好!");
}  

function Person(name){
    this.name=name;
    this.hello=hello;
}
var p = new Person("李四");
//此時調用者是Person
p.hello();//==>李四說:你好!
//此時的調用者是window
hello();//==>張三說:你好!
  • 6.原型
//以下方式將會重寫原型,由于原型重寫,而且沒有通過Person.prototype來指定,此時的constructor不會
//再指向Person而是指向Object,如果constructor真的比較重要,可以在json中說明原型的指向
Person.prototype  =  {
    constructor:Person,//手動制定constructor
    name: "張三",
    age: 22,
    say: function(){
        aler(thsi.name+"," + this.age);
    }
}
原型理解

動態(tài)原型

function Person(name,age,friends){
    this.name = name;
    this.age = age;
    this.friedns = friends;
    //判斷Person.protorype.say是否存在,如果不存在則創(chuàng)建
    if(!Person.protorye.say){
          Person.protorye.say = function(){
                alert(this.name + "[" + this.friends + "]");
            }
     } 
}

繼承

//基于原型鏈的方式實現(xiàn)繼承
function Parent() {
    this.pv = "parent";
}
Parent.prototype.showParentValue = function() {
    alert(this.pv);
}

function Child() {
    this.cv = "child";
}

Child.prototype = new Parent();

Child.prototype.showChildValue = function() {
    alert(this.cv);
}

var c = new Child();
c.showChildValue();
c.showParentValue()
//-----------------------------------------華麗分割線---------------------------------------
//在使用原型鏈進行繼承一定要注意以下問題:
//1.不能 在設定了原型鏈之后,再重新為原型鏈賦值
//當執(zhí)行下面的代碼,就意味著Child原型又重寫了,就不存在繼承關系了
Chil.prototype = {
   showChildValue = function() {
    alert(this.cv);
    }
}
//2.一定要再原型賦值之后才能添加或者覆蓋方法
Child.prototype.showChildValue = function(){
    alert(this.cv);
}
//如果以上代碼在[Child.prototype = new Parent()]之前執(zhí)行,那么就會繼承之后就會覆蓋該方法。

/**
  * 使用原型鏈繼承,最大的確定就是,無法從子類中調用父類的構造函數(shù),這樣就沒辦法把子中的屬性賦值到父類
  * 第二個就是,如果父類有引用類型,此時這個引用類會天階島子類的原型中,當?shù)谝粋€對象修改了這個引用之后,其他對象的引用同時修改
  *
**/


基于原型鏈的繼承
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容