JavaScript学习总结

本文深入探讨JavaScript中函数的定义、对象内存模型、作用域、this关键字等高级概念,并详细解析函数对象的apply和call方法,以及如何利用对象原型链进行函数的复用和继承。同时,通过实例演示构造函数的使用、对象原型链的工作原理,以及如何创建和操作JavaScript对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaScript函数

1、定义函数function的四种方式。

function add(a,b){
    return a+b;
};

var add=function(a,b){
       return a+b;
};

var add=function test(a,b){
       return a+b;
};

var add=new Function('a','b','return a+b;');

2、 函数对象内存模型。

       JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。

       JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别;从函数原型可以看到,第一个参数都被取名为thisArg,即所有函数内部的this指针都会被赋值为thisArg,这就实现了将函数作为另外一个对象的方法运行的目的。两个方法除了thisArg参数,其它都是为Function对象传递的参数。

function add(a,b){
    return a+b;
}

var r=add.apply({},[1,2]);  
alert(r);
r=add.call({},3,4);  
alert(r);

3、 JavaScript函数作用域及作用域链。

4、JavaScript this关键字。

       JavaScript this的作用与指向跟很多真正面向对象的开发语言是有很大差别的,它不是始终指向当前对象,是会变化的。如果不注意这个问题,就有可能遇到看似没错的代码报错或不执行等问题,this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。

 

JavaScript对象

1、创建一个对象的两种方式。

var obj=new Object();
obj.name='huangpei';
obj.age=28;

var obj2={name: 'huangpei',age:28};

2、JavaScript构造函数。

      Object 本质上也是一个函数(Function, String, Number, Date),javascript中,任何一个函数,都是可以作为构造函数。

function People(name,age){
    this.name=name;
    this.age=age;
}
var p1=new People('hp',28);

说明:js引擎帮我们生成一个空的对象obj, 调用 People.call(obj, args...),代码执行过程:

function People(name, age){

    // 隐式执行 this = {};

    this.name = name;

    this.age = age;

    // 隐式执行 return this;

}

function Test(name){

    this.name = name;

    // 存在显示return的时候,则返回实际返回的对象

    //return {name : 'newname'};

    //return new String();

    // 当显示返回的是基本数据类型的时候,return 无效

    //return 'abc';

    //return 100;

    //return true;

}

var oo = new Test('ooo');

alert(oo.name);

3、JavaScript对象原型链。

a、防止 多个对象重复定义函数

function People(name, age){
    this.name = name;
    this.age = age;
}
People.prototype.show = function(){
    alert('my name is ' + this.name  + ", my age is " + this.age);
};
var p1 = new People("who", 100);
var p2 = new People("me", 40);
p1.show();
p2.show();
alert(p1.show == p2.show);

b、继承

function Animal(name){
    this.name=name;
}
function Bird(){
}
Bird.prototype=new Animal('bird');
var b=new Bird();
alert(b.name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值