ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

函数(function)知识点整合--2

2022-02-27 18:57:59  阅读:123  来源: 互联网

标签:function 知识点 name -- 函数 对象 fun 构造函数


关于函数上下文对象(this) 的讲解

我们每次调用函数时,解析器都会将一个上下文对象作为隐含的参数传递进函数。使用this来引用上下文对象,根据函数的调用方式不同会执向不同的对象。

1.以函数的形式调用时,this是window

function fun(){
    console.log(this.name);
}
var obj = {
    name:'孙悟空',
    sayName:fun
}
var name = '白骨精';
fun()//以函数的形式调用,this永远是window,返回‘白骨精’

2.以方法的形式调用时,this是调用方法的对象

什么是方法(method)

- 可以将一个函数设置为一个对象的属性,当一个对象的属性是一个函数时,我们称这个函数是该对象的方法。

对象方法的调用方法:

- 对象.方法名();

- 函数名();

function fun(){
    console.log(this.name);
}
var obj = {
    name:'孙悟空',
    sayName:fun//函数作为obj对象的方法(method)
}
obj.sayName()//==fun(),以方法的形式调用,this就是调用方法的那个对象,返回"swk"

3.以构造函数的形式调用时,this是新建的那个对象

什么是构造函数

- 构造函数是专门用来创建对象的函数

- 一个构造函数我们也可以称为一个类

- 通过一个构造函数创建的对象,我们称该对象时这个构造函数的实例

- 通过同一个构造函数创建的对象,我们称为一类对象

- 构造函数就是一个普通的函数,创建方式和普通函数没有区别,只是他的调用方式不同,如果直接调用,它就是一个普通函数。如果使用new来调用,则它就是一个构造函数

//创建一个Person类
function Person(name,age){
    this.name  = name;
    this.age  = age;
    this.sayName = function(){
        alert(this.name);
    }
}
var per = new Person('Alex',99);//以构造函数的形式调用,this是这个新建的实例对象
console.log(per.sayName());//输出Alex

instanceof

-用来检查一个对象是否是一个类的实例

- 语法:对象 instanceof 构造函数

- 如果该对象时构造函数的实例,则返回true,否则返回false。Object是所有对象的祖先,所以任何对象和Object做instanceof都会返回true

//创建一个Person类
function Person(name,age){
    this.name  = name;
    this.age  = age;
    this.sayName = function(){
        alert(this.name);
    }
}
var per = new Person('Alex',99);
console.log(per instanceof Person);//true

4.使用call和apply调用时,this是函数指定的那个对象

- 这两个方法都是函数对象的方法,需要通过函数对象来调用

- 通过两个方法可以直接调用函数,并且可以通过第一个实参来指定函数中this

function fun(){
    alert(this.name);
    
}
var obj2 ={
    name:234;
};

fun.call(obj2)//函数对象是obj2,输出obj2的name属性值
var obj = {
    name: 123,
    sayName: function(){
        alert(this.name)
    }
    
};
var obj2 ={
    name:234
    };

obj.sayName.apply(obj2)//函数对象是谁,this就是谁,输出234,

apply() 和call()的差别:

call是直接传递函数的实参,而apply需要将实参封装到一个数组中传递

function fun(a,b){
    console.log("a="+a);
    console.log("b="+b); 
}

var obj = {
    name: 123,
    sayName: function(){
        alert(this.name)
    }

fun.call(obj,2,3)//传递实参,a =2,b = 3
fun.appl(obj,[2,3])//需要封装实参

 5.在全局作用域中this代表window

function fun(){
    alert(this);
}

fun() //输出[object Window]

标签:function,知识点,name,--,函数,对象,fun,构造函数
来源: https://blog.csdn.net/weixin_44522602/article/details/123166476

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有