如何构建对象

一 使用工厂方法构建对象

  JS中创建对象较老的方式,由于使用该方法无法进行实例归属检测(弊端)。【JS中提供的内置对象都是支持实例归属检测的】

  

 var person = new Object();
         person.name = "张三";
         person.age = 18;
         person.sex = "男";
         person.eat = function(){
             console.log("吃饭");
         }
         person.say = function(){
             console.log("说话");
         }

二 使用单例模式(字面量形式)构建对象

  {}等同于new Object();书写简单,结构清晰,但同样无法检测实例归属,使用比较广泛。

 var person1 = {
            name:"张三",
             age:18,
             sex:"男",
             eat:function(){
                 console.log("吃饭");
             },
             say:function(){
                 console.log("说话");
             }
         };
         console.log(person1);
         console.log(person1.name);
         person1.eat();

三 使用构造函数构建对象

  使用new操作符调用一个函数时,该函数会变为构造函数。

  首先,该构造函数内部的this指向会指向自己实例本身(该对象自己)。

  其次,该构造函数返回值会返回一个对象的实例。默认返回对象实例本身,也可以返回一个自定义对象。

    注意:若书写return,则return后面必须为对象(object类型),如果是基本数据还是返回实例本身。

 var Person = function(){
            console.log(this);
            this.name = "张三";
            this.age = 18;
            this.sex = "男";
            this.eat = function(){
                console.log("吃饭");
            }
            this.say = function(){
                console.log("说话");
            }
            // return {
            //     name:"李四"
            // };
        }

使用function关键字定义的函数都是Function对象的实例,只是这个实例化过程 new Function()由浏览器自动处理。

instanceOf操作符可以用来检测一个实例是否来于一个对象,若返回true就是断言成功,false为断言失败。

在javascript原型链的探讨中,我也讲过,构建对象时将方法放于该构造函数的原型对象中,可以解决该对象创建多个实例造成的内存冗余问题。(解决内存冗余的原理就是因为原型对象中的属性可以被多个实例共享)。

静态属性不需要new来实例化,js的静态属性是存在于Function对象实例下的一个属性。使用静态属性的好处是调用时候可以不写new操作符进行实例化了。

 // Person.eat = Person.prototype.eat = function(){
        //     console.log("吃饭");
        // };
        var Person = function(){

        }
        Person.eat = function(){
            console.log("A");
        }
        Person.prototype.eat = function(){
            console.log("B");
        }
        var person = new Person();
        person.eat();   //B
        Person.eat();  //A

        //以上静态属性和动态属性的原理:
        //在解释器内部运行如下
        // var person = new Person();
        // person.eat();
        //
        // var Person = new Function();
        // Person.eat();
时间: 2024-08-23 10:08:30

如何构建对象的相关文章

.NET Core TDD 前传OA 信用盘平台搭建: 编写易于测试的代码构建对象

联系方式:QQ:2747044651 网址http://zhengtuwl.com常情况下, 我们是先去建造汽车, 组装好汽车后, 我们再去驾驶它. 软件开发也类似, 我们应该把对象构造完毕之后, 再去用它. 但是有时候, 开发者会在构造过程中添加一些程序逻辑. 这就相当于车还没造完, 我们就驾驶它去兜风了. 这样做是不太好的. 构造函数是类用来创建其实例对象的方法, 这里的代码是用来准备该对象的. 但有时开发者会在构造函数里做一些其它的工作, 例如构建依赖项, 执行初始化逻辑等等. 在构造函数

Javascript构建对象重点(一)

//person类 var Person = { making:function (name,age) { this.name = name; this.age = age; }, say:function () { document.write(this.name+" "+this.age+" "); } } //创建对象的函数,需要传递两个参数,一个是类(Person),一个是类的实参. function Create(obj,arg){ function Cr

使用Linq 查询数据 构建对象 select new{}

linq 查询数据 /// <summary> /// 汽车品牌及车型 /// </summary> /// <returns></returns> public string GetCarBrandSeries() { var result = from a in db.CR_BC_BRAND join c in db.CR_BC_BRAND_SERIES on a.CR_BC_BRAND_ID equals c.CR_BC_BRAND_ID select

构建对象和数组的方法

js创建对象的6种方法 1.对象字面量方法 var person ={ name: "qinqin", age: 24, family: ["fanfan","ningning","lingling"], say: function(){ console.log(this.name); } }; 2.new操作符+Object创建对象 var person = new Object(); person.name = "

JavaScript对象 -构建

首先,在js里,对象是由函数构建而成的. 创建对象的几种模式 1.工厂模式 function person(name,age,job) { var o=new Object(); o.age=age; o.name=name; o.job=job; o.sayname=function () { console.log(this.name); } return o; } var person1=person("1",1,"1"); person1.sayname()

Android调用WebService系列之对象构建传递

上一篇我们讲了如何封装Android调用WebService的能力,把上一章的类加入我们便有了与WebService通讯的能力.往往我们会遇到WebService调用是通过对象来进行实际交互调用的.于是便有了这一章构建对象传递. 首先我们了解一下. Ksoap2这个开源包里面提供了一个接口 /* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany  *  * Permission is hereby grant

core JAVA 学习篇之深入理解对象与类

一.面向对象概述 1.面向对象程序设计(OOP): (1)由对象组成,每个对象包含,对用户公开的特定的功能部分,和隐藏的实现部分. (2)如果对象能够满足需求,则不必关心其功能的实现过程. (3)与结构化程序设计区别: 结构化程序设计:Algorithms + Data Structures = Programs;算法是第一位的,数据结构是第二位的.程序员首先确定如何操作数据,然后确定如何组织数据. 面向对象程序设计:Data Structures + Algorithms = OOP:OOP将

JavaScript定义类与对象的一些方法

最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (function () { 3     alert(a); 4     var a = 'local'; 5 })(); 大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的. 其实很简单,看一看JavaS

Python 类型和对象(转)

译文:http://wiki.woodpecker.org.cn/moin/PyTypesAndObjects 原文:http://www.cafepy.com/article/python_attributes_and_methods/ 解释新式的Python对象(new-style): <type 'type'> and <type 'object'>是什么东西 用户定义的类及实例是如何相互关联的,和内置类型有啥关系how user defined classes and in