JS:构造函数

定义:

用new关键字来调用的函数,称为构造函数,构造函数首字母一般大写。

 

理解:

创建对象,并调用函数,new fn,无参;

创建对象,并调用函数,new fn(),带参;

在构造函数中使用return,如果返回的值是一个对象,它会代替新创建的对象实例返回。如果返回的值是一个原始类型,它会被忽略,新创建的实例会被返回。 

看例子!

        function Person(name, age) {
            this.name = name;
            this.age = age;
        }
        var p1 = new Person('lili',10);
        console.log(p1);

打印结果:

Person {name: 'lili', age: 10}

 

创建带参无参对象及调用函数:

        function fn(a) {
            this.a = a;
            this.b = 20;
            return "hello";
        }

        var re = new fn;  //构造函数
        console.log(re);

        var re2 = new fn(200);  //构造函数
        console.log(re2);

        var re3 = fn(90);  //普通函数调用
        console.log(re3);

打印结果:

fn {a: undefined, b: 20}
fn {a: 200, b: 20}
hello

 

理解:

首先定义变量提升;re是创建了一个新对象,并调用了不带参数的函数fn;re2也是创建了一个新对象,并传入参数,隐式操作是var a = 200,并调用函数;re3是函数调用,并传入参数 a = 90。

 

例:

        function fn() {
            this.name = "karen";
            return function fm() {
                console.log("fm运行了");
                this.name = "jack";
            }
        }
        var f1=new fn();
        console.log(f1);
        console.log(f1.name);   //"fm"

理解:f1的结果看fn函数的返回值是不是引用数据,如果是,则返回哪个引用数据,此时是一个fm函数,如果不是一个对象,那么

就返回新创建的对象。

 

例:

        function fn() {
            this.name = "marry";
            var obj = {
                name: "karen",
                fm: function () {
                    this.name = "jack"
                }
            }
            return obj;
        }

        var f1 = new fn(); 
        console.log(f1.name); //karen

        var f2 = new((new fn()).fm)();
        console.log(f2.name);     //jack            

        var f3 = new fn();
        var f4 = new(f3.fm)();
        console.log(f3.name, f4.name);     //karen,jack

 

理解:

f2:首先new fn()创建一个对象,再调用,返回一个obj对象,再引用成员fm,并创建一个新的对象,再调用name,因此打印jack。

f3和f4是f2拆分的结果,应该能理解。

 

posted on 2022-06-20 09:45  香香鲲  阅读(654)  评论(0编辑  收藏  举报