js中8种创建对象的方式

对象的定义为:“无序属性的集合,其属性可以包含基本值,对象或者函数”

 

1.创建单个对象(对象字面量,构造函数):

<script type="text/javascript">
    //通过创建phone实例为例子
    //构造函数创建单个对象
        // var phone=new Object();
        // phone.color=‘black‘;
        // phone.size=24;
        // phone.getColor=function(){
        //     console.log(this.color);
        // }
    //对象字面量创建单个对象
        var phone={
            //属性
            color:‘black‘,
            size:24,
            //方法
            getColor:function () {
                console.log(this.color);
            }
        }
    //测试
    console.log(phone)
</script>

测试结果为:

2.工厂模式创建多个对象

利:可以创建多个相似对象

弊:所有创建的对象的类型都为Object类型

<script type="text/javascript">
    //工厂模式
        function createPhone(color,size){
            //创建一个Object对象
            var o=new Object();
            //将传入的值赋给这个对象的属性
            o.color=color;
            o.size=size;

            o.getColor=function(){
                console.log(this.color);
            }
            //返回这个对象
            return o;
        }
    //测试
        var phone1=createPhone(‘black‘,8);
        var phone2=createPhone(‘blue‘,5);
        console.log(phone1,phone2)
</script>

3.构造函数模式创建多个对象

利:自定义构造函数可以将实例构造成一种特定的类型

弊:每创建一个实例,都要创建一个getColor方法

<script type="text/javascript">
    //构造函数模式
        function Phone(color,size){
            this.color=color;
            this.size=size;

            this.getColor=function(){
                console.log(this.color);
            }
        }
        //1.创建一个新对象
        //2.将构造函数的作用域赋给新对象(this指向这个新对象)
        //3.执行构造函数中的代码
        //4.返回新对象
        var phone1=new Phone(‘black‘,4);
        var phone2=new Phone(‘blue‘,5);
</script>

4.原型模式创建多个对象

利:可以让所有对象的实例都共享它所包含的属性和方法

弊:所有实例取得的属性值都是一样的,原型对象对所有实例一视同仁,开放共享

<script type="text/javascript">
    //原型模式
        // function Phone(){};
        // Phone.prototype.color=‘black‘;
        // Phone.prototype.size=5;
        // Phone.prototype.getColor=function(){
        //     console.log(this.color);
        // }
        // var phone1=new Phone();
        // console.log(phone1);
    //也可以使用对象字面量写
        function Phone(){}
         Phone.prototype={
            color:‘black‘,
            size:5,

            getColor:function(){
                console.log(this.color)
            }
        }
        var phone1=new Phone();
        console.log(phone1)
</script>

5.组合使用构造函数和原型模式创建多个对象

<script type="text/javascript">
    //组合使用构造函数模式和原型模式
        function Phone(color,size){
            this.color=color;
            this.size=size;
        }
        Phone.prototype={
            constructor:Phone,
            getColor:function(){
                console.log(this.color)
            }
        }
        var phone1=new Phone(‘black‘,2);
        var phone2=new Phone(‘blue‘,5);
        phone1.color=‘golden‘;
        console.log(phone1);
        console.log(phone2);

</script>

6.动态原型模式创建多个对象

<script type="text/javascript">
    //动态原型模式
        function Phone(color,size){
            this.color=color;
            this.size=size;
            //初次调用构造函数时才会执行下面的代码
            if(typeof this.getColor!=‘function‘){
                //不能使用对象字面量方式创建
                Phone.prototype.getColor=function(){
                    console.log(this.color);
                }
            }
        }
        var phone1=new Phone(‘black‘,3);
        console.log(phone1);
        phone1.getColor();
</script>

7.寄生构造函数模式创建多个对象

<script type="text/javascript">
    //寄生构造函数模式
        function Phone(color,size){
            var o=new Object();
            o.color=color;
            o.size=size;
            o.getColor=function(){
                console.log(this.color)
            }

            return o;
        }
        var phone1=new Phone(‘black‘,3);
        console.log(phone1)
</script>

8.稳妥构造函数模式创建多个对象

<script type="text/javascript">
    //稳妥构造函数模式(稳妥对象是指没有公共属性)
        function Phone(color,size){
            var o=new Object();
            //定义私有变量
            var name=‘huaiwei‘;
            //定义私有函数
            var getName=function(){
                console.log(name);
            }

            o.getColor=function(){
                console.log(color);
            }
            return o;
        }
        var phone1=Phone(‘black‘,3);
        phone1.getColor();
</script>

原文地址:https://www.cnblogs.com/xingguozhiming/p/8642094.html

时间: 2024-10-09 08:15:00

js中8种创建对象的方式的相关文章

JS中三种字符串连接方式及其性能比较

工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法  用连接符“+”把要连接的字符串连起来: str="a"; str+="b"; 毫无疑问,这种方法是最便捷快速的,如果只连接100个以下的字符串建议用这种方法最方便. 第二种方法  以数组作为中介用 join 连接字符串: var arr=new Array(); arr.push(a); arr.push

[转]js中几种实用的跨域方法原理详解

转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequ

js中几种实用的跨域方法原理详解(转)

这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/page.html同源检测的结果: 要解决跨域的问题,我们可以使用以下几种方法: 一.通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同

javascript 中九种创建对象的方式

javascript 中对象的简介: ECMA-262 把对象的定义为:"无序属性的集合,其属性可以包含基本值,对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正是因为这样,我们可以把 javascript 中的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. javascript 中九种创建对象的方式: 1.原生 Object 构造函数 2.对象字面量表示法 3.工厂模式 4.构造函数模式 5

Ext.js 中 25种类型的Ext.panel.Tool

通过Ext.panel.Panel的tools配置项来设置Ext.panel.Tool实例. 要注意的一点是,Ext框架提供的Ext.panel.Tool仅包含按钮图标而具体的点击事件处理函数需要我们自定义. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

[js]js中6种错误处理机制

js中6种错误 http://javascript.ruanyifeng.com/grammar/error.html#toc5 https://www.jianshu.com/p/467b9a145dcc try cache try { console.log(x); }catch (e) { console.dir(e); } console.log('还可以执行') try { console.log(x); }catch (e) { console.dir(e); throw new E

js默认三种弹框方式

<!--js默认三种弹框方式--> <!--警告--><div onclick="alert('警告')">onclick!</div> <!--确认--><div onclick="confirm('确认')">onclick!</div> <!--信息输入--><div onclick="prompt('信息输入')">onclick!

关于js中两种定时器的设置及清除

1.JS中的定时器有两种: window.setTimeout([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法[function],当方法执行完成定时器停止(但是定时器还在,只不过没用了); window.setInterval([function],[interval]) 设置一个定时器,并且设定了一个等待的时间[interval],当到达时间后,执行对应的方法[function],当方法执行完成,定时器

js中几种实用的跨域方法原理详解(转)

今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开始 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被当作是不同的域. 下表给出了相对http://store.company.com/dir/pag