javascript的对象(Object)

对象

定义

  • 在JavaScript中是没有类的概念的,只有对象。无论是字符串,数值,数组还是函数,其本质都是对象。此外,JavaScript是允许自定义对象。什么是对象呢?简而言之,对象是带有属性和方法的特殊数据类型

1、基于已有对象扩充其属性和方法

  • 简单的创建一个对象,然后动态地为其增加属性和方法。
var object=new Object();
object.name="zhangsan";
object.sayName=function()
{
    this.name=name;
 }
object.sayName("lisi");      

2、工厂方法

  • 工厂方式的优点在于你不需要每次扩充方法和属性,一次建成后就可以产生多个对象,无需关注创建细节,甚至不需要关注具体类的类名。
function factory()
{
    var object = new Object();
    object.username = "zhangsan";
    object.password = "123";

    object.get = function()
    {
        return (this.username+","+this.password);
    }
    return object;
}
var object1 = factory();     
object1.get();
var object2 = factory();
  • 好的对象创建方式应该满足方法可以被多个对象共享,而属性私有,使代码更加简略。同时,也可以将上述的程序改写为带参数的工厂创建方式。改进后的代码如下:
function get(){
    return (this.username+","+this.password);
}

function factory(username,password){
    var object = new Object();
    object.username = username;
    object.password = password;

    object.get = get;
    return object;
}

var object1 = factory("zhangsan","123");
object1.get();
var object2 = factory("lisi","456");

3、构造函数方式

  • 使用构造函数方式时,JavaScript引擎会在第一行代码执行前为我们生成一个对象,同时含有一个隐藏的return语句,将生成的对象返回。因此,在函数体内,无需显性地声明。
function Person(){
    //在执行第一行代码前,js自动生成一个对象
    this.username = "zhangsan";
    this.password = "123";

    this.get = function(){
        return (this.username+","+this.password);
    }
    //隐藏的return语句,将生成的对象返回
}

var person = new Person();
person.get();

同理,也可以将其改为可传递参数的构造函数。

4、使用原型(prototype)方式

  • 单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
function Person()
{
}

Person.prototype.username = "zhangsan";
Person.prototype.password = "123";
person.prototype.get = function(){
    return (this.username+","+this.password);
}

var person = new Person();
person.username = "lisi";
person.password = "456";
person.get();
  • 如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反映到其他对象当中。可以使用原型+构造函数方式来解决这个问题,使对象之间的属性互不干扰,各个对象间共享同一个方法。这也是推荐使用的方法。
function Person()
{
    this.username = new Array();
    this.password = "";
}

Person.prototype.get = function()
{
    return (this.username+","+this.password);
}

var p1 = new Person();
var p2 = new Person();

p1.username.push("zhangsan");
p1.password = "123";

p2.username.push("lisi");
p2.password = "456";

p1.get();
p2.get();

5、动态原型方式

在构造函数中,通过标志量让所有对象共享一个方法,而每个对象都拥有自己的属性。

function Person()
{
    this.username = "zhangsan";
    this.password = "123";

    if(typeof Person.flag == "undefined")
    {
        Person.prototype.get = function()
        {
            return (this.username+","+this.password);
         }
        Person.flag = true;
    }
}
var p1 = new Person();
var p2 = new Person();
p1.get();
p2.get();

以上转载自https://blog.csdn.net/qq_41690306/article/details/79253501

    *定义
                    * 字面量
                    * 构造函数
                * 格式: {属性名:属性值,属性名:属性值}
                * 操作(属性名:[],点语法)
                    * 增 添加一个属性
                    * 删 删除一个属性
                    * 改 修改一个现有属性
                    * 查 读取属性名对应的属性值
                        * 读取不存在的属性得到:undefined
                    * 遍历
         */
// 字面量
            // 
            var person = {
                name:'laoxie',
                age:18,
                gender:'男',
                hobby:['写代码','休闲会所','羽毛球']
            }

            // 添加属性
            // person['nickname'] = '小谢';
            person.nickname = '小谢';

            // 删除属性
            // delete
            // delete person['hobby'];
            delete person.hobby;


            // 修改
            person.age = 19;

            // 读取属性值
            console.log(person.name)


            console.log(person);

            // 读取所有属性
            // 遍历对象全部属性:for...in
            for(var key in person){
                // 遍历过程分别把属性名赋值给key
                // 1.var key=name;
                // 2.var key=age
                // 3.var key=gender
                // 4.var key=nickname
                // console.log(key);

                // 获取key对应的属性值
                console.log(key,person[key]);//person.key
            }

下面转载自老谢

猜你喜欢

转载自blog.csdn.net/qq_39222965/article/details/80274653