美文网首页
JavaScript学习笔记

JavaScript学习笔记

作者: 吴蜀黍 | 来源:发表于2018-01-22 10:05 被阅读14次
  • 1.常用数据类型:Nunnber String Array Date
  • 2.强制类型转换方式 :
var a = "10";
var result = (Nunber) a + 1;
//可以将字符串开头的几个数字转成int
var b = "12px";
parseInt(b)==>12

  • 3.关于boolean类型
    在js中NaN underfined 0这三个是数是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变量指向整个函数fn,可以 通过x()来调用函数。
var x = fn;
//此时代表的是调用函数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.函数
//函数的参数和调用没有关系,如果函数只有一个参数,但是却传入了两个参数,仅仅只会匹配一个,所以JS中函数不存在重载,后面定义的函数会覆盖前面定义的
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
//-----------------------------------------华丽分割线---------------------------------------
//函数可以通过参数的方式传入
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关键字,可以通过该关键字获取相应属性的参数值,这个属性是一个数组,其实就是传递进来的参数
//arguments这个对象中有一个callee方法,可以反向调用函数,实现函数名的解耦合
function fn1(num){
    if(num <= 1)  return 1;
    else return num * arguments.callee(num - 1);
}
//this: this关键字在调用时候回根据不同的对象变得不同
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);
    }
}
原型理解

动态原型

function Person(name,age,friends){
    this.name = name;
    this.age = age;
    this.friedns = friends;
    //判断Person.protorype.say是否存在,如果不存在则创建
    if(!Person.protorye.say){
          Person.protorye.say = function(){
                alert(this.name + "[" + this.friends + "]");
            }
     } 
}

继承

//基于原型链的方式实现继承
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.不能 在设定了原型链之后,再重新为原型链赋值
//当执行下面的代码,就意味着Child原型又重写了,就不存在继承关系了
Chil.prototype = {
   showChildValue = function() {
    alert(this.cv);
    }
}
//2.一定要再原型赋值之后才能添加或者覆盖方法
Child.prototype.showChildValue = function(){
    alert(this.cv);
}
//如果以上代码在[Child.prototype = new Parent()]之前执行,那么就会继承之后就会覆盖该方法。

/**
  * 使用原型链继承,最大的确定就是,无法从子类中调用父类的构造函数,这样就没办法把子中的属性赋值到父类
  * 第二个就是,如果父类有引用类型,此时这个引用类会天阶岛子类的原型中,当第一个对象修改了这个引用之后,其他对象的引用同时修改
  *
**/


基于原型链的继承

相关文章

网友评论

      本文标题:JavaScript学习笔记

      本文链接:https://www.haomeiwen.com/subject/tzxaoxtx.html