JS中对象的创建

来源:互联网 发布:淘宝规定多长时间发货 编辑:程序博客网 时间:2024/06/13 21:15

1.对象字面量

<script type="text/javascript">            var cat = {            name:"miao",            age:1,            color:"白",            showTime:function(){                alert("我的名字叫"+this.name+",我"+this.age+"岁了 ,我是一只可爱的"+this.color+"喵~");            }        };        cat.showTime();        </script>

2.创建Object实例

var cat = new Object();        cat.name = "喵";        cat.sayHello = function(){            alert("我的名字叫"+cat.name);        }        cat.sayHello();

3.工厂模式创建

创建一个对象,将对象属性作为参数传入,返回对象。

使用工厂模式创建对象使用的构造函数都是 Object,所以创建的对象类型都是 Object类型,无法区分多种类型的对象。

function creatCat(name,age,color){            var cat = new Object();            cat.age = age;            cat.name = name;            cat.color = color;            cat.showTime = function(){                alert("我的名字叫"+this.name+",我"+this.age+"岁了 ,我是一只可爱的"+this.color+"喵~");            };            return cat;        }        var cat1 = creatCat("大喵",3,"白");        var cat2 = creatCat("中喵",2,"黄");        var cat3 = creatCat("小喵",1,"黄");        alert(cat1);        cat1.showTime();        alert(cat2);        cat2.showTime();

4.构造函数模式

function Person(){            alert(this);            this.name = "lina";            this.age = 18;            this.sayName = function(){                alert(this.name);            };        }        var per = new Person();  //作为构造函数调用,返回值为 person        var per = Person();  //作为普通函数调用,返回值为 undefined        //console.log(per);        function Person(name,age){            //alert(this);            this.name = name;            this.age = age;            this.sayName = function(){                alert(this.name);            };        }        var per = new Person("lin",20);        var per2 = new Person("ann",21);        var per3 = new Person("ben",22);        console.log(per);        console.log(per2);        console.log(per3);

使用构造函数创建出的对象为一类对象,每个类new 出的对象称为实例。

this 的情况:
当以函数形式调用时,this是 window
以方法调用,this是调用方法的对象
以构造方法形式调用时,this 指新创建的对象。

5.原型模式

  • 什么是原型(prototype)

    我们所创建的每一个函数,解析器都会向函数中添加一个prototype属性
    这个属性对应着一个对象,这个对象就是原型对象
    如果函数作为普通函数调用,prototype没有任何作用
    当函数作为构造函数调用时,他所创建的对象都会含有一个隐含的属性也指向构造函数的原型对象
    可以通过 proto来访问属性

    原型对象就相当于一个公共的区域,所有同一个类的实力都可以访问,我们可以将对象中共有的内容,统一设置到原型变量中

    当我们访问对象的属性或方法时,会先在自身变量中找,如果有则使用,如果没有,则去原型变量中找

    创建构造函数时,可以将对象共有的属性方法添加到构造函数的原型对象中,这样就不用给对象一一添加,也可以解决构造函数多次执行形成作用相同的多个方法浪费资源,也不会污染全局作用域

function MyClass(){            }            //向MyClass 的原型中添加属性a,属性值为123            MyClass.prototype.a = 123;            MyClass.prototype.sayHello = function(){                alert("hello");            };            var mc = new MyClass();            console.log(MyClass.prototype);            console.log(mc.__proto__ == MyClass.prototype);            //向 mc 中直接添加a属性            mc.a = "我是mc中的a";            console.log(mc.a);            mc.sayHello();

原型对象也是对象,所以也有原型,
当我们使用一个对象的属性方法,会先在自身中寻找
如果没有则去原型对象中寻找,如果没有,则去原型的原型中寻找,知道找到Object 对象的原型,Object 对象的原型没有原型,如果依然没有找到,返回undefined

使用 in 检查对象有没有含有该属性,如果原型中有也会返回 trueconsole.log("name" in mc);可以使用对象的 hasOwnProperty方法 来检查对象自身是否含有该属性console.log(mc.hasOwnProperty("age"));
原创粉丝点击