js高级语法

实例是什么

实例:实例对象
类型 :类型对象


  function Person(name, age) {
            this.name = name;
            this.age = age;
        }

        var p = new Person("dage", 12); //根据类型创建的实例对象  写法上构造函数的类名第一个字母大写


        Person("jack", 12); //此时是函数,不推荐这样写
        // console.log(typeof p);

undefined 和null的区别

undefined 定义了没有复制 例如: var a ;
null 定义了并且赋值了,只是赋值为null

一般什么时候给变量赋值为null

在给对象赋值之前,对象相关的数值还没准备好,先给对象设置一个null值(表明将要赋值给对象)

var b = null;
console.log(typeof b);
此时打印为Object,但是null是基本数据类型

结束前 给对象赋值为null,方便垃圾回收器回收

变量的类型(通过变量内存值的类型区分)

基本类型 :保存的就是基本类型的数据
引用类型:保存的是地址值

内存分类

栈: 保存全局变量或者局部变量
堆: 保存对象

js如何调用(执行函数)

特殊的地方: test.call/apply(obj) 相当于obj.test() 临时让test()方法成为obj对象的方法进行调用
但是不能直接obj.test() ,因为obj对象原来没有test()方法


        var p = {
            "name": "Tom",
            age: 998,
            setName: function(name) {
                this.name = name;
            },
            setAge: function(age) {
                this.age = age;
            }
        };
        console.log(p.name, p["age"]);

        p.setName("周大哥");
        p["content-type"] = "hah";
        console.log(p["name"]);


        function test() {
            this.ceshi = "函数调用测试";
        };

        // test.call(p);
        test.apply(p);
        console.log(p.ceshi);

在这里插入图片描述

回调函数

  1. 你定义的
  2. 你没有调用
  3. 但它最终执行了

常见的回调函数: dom回调函数(鼠标点击事件)、定时器回调函数、 ajax请求回调函数、生命周期回调函数

立即执行函数表达式

后面可以用来写模块


        (function() {
            // 匿名函数自调用
            console.log("立即执行函数表达式");
        })();


        (function() {
            var a = 1;

            function test() {
                console.log(++a);
            };
            // 向外暴露一个全局函数
            window.$ = function() {
                return {
                    test: test
                };
            }
        })();

        $().test();
        // $是一个函数   $()执行后返回的是一个对象,因为{}    打印2

this是什么

  1. 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
  2. 所有函数内部都有一个变量this
  3. 它的值是调用函数的当前对象

如何确定this的值

           调用者

test() window
p.test() p
new test() 新创建的对象
p.call(obj) obj

函数的prototype属性

每个函数都有prototype属性,它默认指向一个Object空对象(原型对象)
原型对象中有一个属性constructor,它指向函数对象
给原型对象添加属性(一般都是方法) 作用:函数的所有实例对象自动拥有原型中的属性(方法)



        function Fun() {

        }
        console.log(Date.prototype, typeof Date.prototype);
        console.log(Fun.prototype); //默认指向一个Object空对象(没有我们自定义的属性)


        // 原型对象中有一个属性constructor  它指向函数对象
        console.log(Date.prototype.constructor === Date, Fun.prototype.constructor === Fun);

        // 给原型对象添加属性(一般是方法)  实例对象可以访问
        Fun.prototype.test = function() {
            console.log("给原型对象添加的方法执行了");
        }

        Fun.prototype.test();
        fun = new Fun();
        fun.test();

在这里插入图片描述


        function Fn() { //相当于此处有内部语句 this.prototype = {}

        }
        //1. 每个函数function都有一个prototype,即显示原型属性,默认指向一个空的Object对象
        console.log(Fn.prototype);

        // 2.每个实例对象都有一个__proto__,可称为隐式原型
        var fn = new Fn(); //相当于此处有内部语句  this.__proto__ = Fn.prototype
        console.log(fn.__proto__);

        // 3.对象的隐式原型的值是对象构造函数的显示原型的值
        console.log(Fn.prototype === fn.__proto__);



        // 给原型添加方法
        Fn.prototype.test = function() {
            console.log("test()");
        }

        fn.test();

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值