侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 144659 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

JavaScript中创建对象的4种方式

2024-04-03 星期三 / 0 评论 / 0 点赞 / 4 阅读 / 4971 字

JavaScript中创建对象的4种方式: 第一种:工厂模式 第二种:构造函数模式 第三种:原型模式 第四种:构造函数+原型模式(构造函数中声明属性,原型对象中处理函数)

JavaScript中创建对象的4种方式:

        第一种:工厂模式

        第二种:构造函数模式

        第三种:原型模式

        第四种: 构造函数+原型模式(构造函数中声明属性,原型对象中处理函数)

        //(1)工厂模式        function createPerson(name,age,gender) {            var o = new Object();            o.name = name;            o.age = age;            o.gender = gender;            o.sayName = function () {                alert('hello');            };            return o;        }        var val = createPerson('joy',23,'female');        console.log(val);        console.log(typeof  val);        var val1 = createPerson('lpen',27,'male');        console.log(val1);        console.log(typeof val1);        //缺点:无法识别对象类型,即所有对象都是object        //(2)构造函数模式        var run = function () {            alert('hhh');        }        function Person(name,age,gender) {            this.name = name;            this.age = age;            this.gender = gender;            this.run = run;        };        var person = new Person('lpen',27,'male');        console.log(person);        console.log(typeof  person);        function  Dog(name,age,gender) {            this.name = name;            this.age = age;            this.gender = gender;            this.run = run;        };        var dog = new Dog('xiaohua',2,'female');        console.log(dog);        console.log(typeof  dog);        console.log(person.run == dog.run);        //使用new调用构造函数创建一个对象        //1.创建一个对象        //2.将构造函数的作用域赋给新对象        //3.执行构造函数中的代码        //4.返回新对象        //问题:(1)每个方法都需要在每个实例上创建一遍,其实没有必要。可以在全局范围中声明一个函数,将该函数的引用传递        //给对象的函数属性,但是这样会导致全局函数太多,体现不了封装性        //(3)原型模式        function Person() {        }        Person.prototype.name = 'joy';        Person.prototype.age = 23;        Person.prototype.gender = 'female';        Person.prototype.say = function () {            alert('hello');        }        var p1 = new Person();        p1.name = 'lpen';        console.log(p1);        var p2 = new Person();        console.log(p2);        //构造函数+原型模式(构造函数中声明属性,原型对象中处理方法)        function Person(name,age,gender) {            this.name = name;            this.age = age;            this.gender = gender;        }        Person.prototype.say = function () {            alert('say');        };        Person.prototype.run = function () {            alert('run');        }        var p1 = new Person('joy',23,'female');        console.log(p1);        p1.say();        p1.run();

 

广告 广告

评论区