对象---声明对象的方式

对象可以分为:1、内建对象:由ES标准中定义的对象,在任何的ES实现中都可以使用,比如:Math String Number Boolen Function等等

       2、宿主对象:有JS的运行环境提供的对象,目前来讲主要指浏览器提供的对象,如:BOM DOM

       3、自定义对象:由开发人员自己创建的对象

下面将对自定义对象进行讲解

声明对象的方式有:

          1、字面式声明对象
                           2、new操作符后跟Object构造函数声明对象
                           3、构造函数声明对象
                           4、工厂方式声明对象
                           5、原型模式声明对象
                           6、混合模式声明对象(构造+原型)

1、js字面式声明对象   

var person1={
           name:"js",
           age:26,
           sex:"男",
           show:function(pl){
               console.log("js正在"+pl);
           }//注意最后一个不需要加逗号
          }
       console.log(person1.name);
       console.log(person1.age);
       person1.show("表演");

2、new操作符后跟Object构造函数声明对象

var person2 = new Object();
      person2.name="java";
      person2.age=20;
      person2.play=function(st){
          console.log(this.age+"岁的"+this.name+"正在"+st);
      };
      console.log(person2.name);
      person2.play("打飞机");

3、构造函数声明对象

function Obj(name,age,done){
          this.name=name;
          this.age=age;
          this.done=done;
          this.watch=function(){
              console.log(this.age+"的"+this.name+"正在看"+this.done);
          }
      }
      var obj1=new Obj("php",10,"美女");
      obj1.watch();
      var obj2=new Obj("小米",12,"野怪");
      obj2.watch();

构造函数声明对象特点:

     1、没有显示的创建对象
             2、直接将属性和方法赋给了this对象;this指向当前对象
             3、没有return语句
       但是它存在的主要问题(缺点):每个方法都要在每个实例上重新创建一遍,这是完全没必要的,如着里的wath()方法,每个实例都会重新创建一次

解决方法1(不可取):  当然我们可以将watch()函数的定义放在构造函数外部,
                  但这又会带来新的问题:污染了全局作用域的命名空间,而且定义在全局作用域也很不安全,方法1的代码如下:

      function Objo(name,age,done){
          this.name=name;
          this.age=age;
          this.done=done;
          this.watch2=watch2;
      }
       function watch2(){
              console.log(this.age+"的"+this.name+"正在看"+this.done);
          }
      var obj3=new Objo("php",10,"美女");
       obj3.watch2();

解决方法2:我们可以采用原型模式的方法来解决以上问题;代码如下:

  function Objo(name,age,done){
          this.name=name;
          this.age=age;
          this.done=done;
      }
      Objo.prototype.watch=function(){
          console.log(this.age+"的"+this.name+"正在看"+this.done);
      }
      var obj4=new Objo("php",10,"美女");
       obj4.watch();

4、工厂方式声明对象

         function createObject(name,age){
             // 在方法内创建对象
             var bj= new Object();
             bj.name=name;
             bj.age=age;
             bj.run=function(){
                 return this.name+this.age;
             }
             return bj;
         }
         var bj1=createObject("张三",15);
         var bj2=createObject("李斯",18);
         console.log(bj1.name);
         bj1.run();

工厂模式
            作用:按照这种模式可以不断的创建对象
                 任何模式下创造出来的对象都是独立存在的
            构造函数声明对象方式与工厂模式的区别:
                1、构造方式不会显示创建对象,将属性值赋值给this,不需要return对象
                2、工厂方式 在方法内创建Object对象,返回Object对象,属性和方法都是赋给Object对象

5、原型模式声明对象

  第一种声明方式:

function proto(){
        };
        proto.prototype.color = "red";
        proto.prototype.height = "2.7";
        proto.prototype.width = "20";
        proto.prototype.say=function(){
            console.log(this.color+"----"+this.height+"----"+this.width);
        }
        var pro1 = new proto();
        pro1.say();

   第二种声明方式:json数据定义属性和方法

         function proto2(){
         };
         proto2.prototype={
             color: "red",
             height: "20",
             width: "50",
             sayby:function(){
                 console.log(this.color+"----"+this.height+"----"+this.width);
             }
         }
         var pro2 = new proto2();
         pro2.sayby();

6、混合模式声明对象(构造+原型)

function blog(name,age,friend){
             this.name=name;
             this.age=age;
             this.friend=friend;
         }
         blog.prototype={
             gets:function(){
                 console.log(this.name+"----"+this.age+"----"+this.friend);
             }
         }
         var blog1 = new blog("张三",24,"李斯");
         console.log(blog1.name);
         blog1.gets();

在实际应用中我们使用混合模式声明对象的方式居多

原文地址:https://www.cnblogs.com/xu991377264/p/9157543.html

时间: 2024-11-10 13:57:40

对象---声明对象的方式的相关文章

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin

iOS:创建单例对象的两种方式

单例模式:创建单例对象的两种方式 方式一:iOS4版本之前 static SingleClassManager *singleManager = nil; +(SingleClassManager*)sharedManager { @synchronized(self)  //同步加锁,在多线程中使用,可以使线程安全 { if(singleManager == nil) { singleManager = [[SingleClassManager alloc]init]; } } return

多个线程访问共享对象和数据的方式

多个线程访问共享对象和数据的方式有两种情况:1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享.2.每个线程执行的代码不同,例如:设计四个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1. a.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个对象中有共享数据.卖票就可以这样做,每个窗口都在做卖票任务,卖的票都是同一个数据(点击查看具体案例). b.如果每个线程执行的代码不同,就需要使用不同的Runnable对象,有两种

[ javascript html Dom image 对象事件加载方式 ] 对象事件加载方式

1 <!DOCTYPE html> 2 <html lang='zh-cn'> 3 <head> 4 <title>Insert you title</title> 5 <meta name='description' content='this is my page'> 6 <meta name='keywords' content='keyword1,keyword2,keyword3'> 7 <meta htt

javascript声明对象

javascript的对象声明有三种方法; 1,使用new关键字直接创建对象 1, var p1 = new Person() 2,使用Object直接创建对象 var myOb = new Object(); myOb.name = 'ttf'; myOb.age = '21'; 3,使用json语法创建对象. var p = {     name: 'ttf',     age:21 };

javascript对象封装的常用方式

JS是门面向对象语言,其对象是用prototype属性来模拟的,下面例举下常用的封装方式. 常规封装 1 function Person(name, age, sex){ 2 this.name = name; 3 this.age = age; 4 this.sex = sex; 5 } 6 7 Person.prototype = { 8 constructor: Person, 9 sayHello: function(){ 10 console.log("hello"); 11

JavaScript学习12 JS中定义对象的几种方式【转】

avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript

(六)javascriptJS中定义对象的几种方式(转)

JavaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascrip

自己定义对象的监听方式

问题描写叙述: 当一个事件的触发不定期的时候,即我们不知道这个触发何时来到,可是我们却要对这个触发运行某些方法,怎样实现? 可能的解决方式: 我当时就想到了,这个问题类似与Android的部件监听(我没有去看Android的源代码,太懒了...).因为如今还在研读Thinking in Java这样的入门书籍,突然来了想法,罗列例如以下,能够通过接口. 以下是我写的一个測试的样例 首先是一个类似Button的部件 package com.example.androidtest2.service;