App下載

JS 如何創(chuàng)建對象?

猿友 2021-01-11 11:35:47 瀏覽數(shù) (2351)
反饋

一、new Object();

 var x="age"

        var obj=new Object();
        obj.name="wang";
        obj.x=20; //.字符串
        obj[x]=25; //[變量]
        console.log(obj);//{name: "wang", x: 20, age: 25}

二、字面量

 var a="hobby"
        var obj={"name":"wang","age":"18"};

            obj.sex="男";
            obj[a]="唱歌";
            obj.say=function(){
            }
            console.log(obj);//{name: "wang", age: "18", sex: "男", hobby: "唱歌", say: ?}
            var obj2={"aa bb":"hellow",".x":"world"};
            console.log(obj2["aa bb"]);//hellow
            console.log( obj2[".x"] );//world

三、工廠模式;

 //1.創(chuàng)建函數(shù)
        function a(name, age) {
            var obj = {
                "name": "wang",
                "age": 19,
                "say": function () {
                }
            }
            return obj
        }
        //2.依次調(diào)用
        var obj1 = a("wang", 20);
        console.log(obj1);//{name: "wang", age: 19, say: ?}
        console.log(obj1 instanceof Object);//true

            //優(yōu)點:返回新對象,互不影響
            //缺點:代碼重復(fù)(方法相同)。
            //  沒有從屬關(guān)系,

四、構(gòu)造函數(shù)

 //四、構(gòu)造函數(shù);
        //優(yōu)點:有從屬
        //缺點:代碼重復(fù)(相同方法);
         //   1.創(chuàng)建函數(shù)
         //2.傳入?yún)?shù)
        function A(name,age){
            //3.this。屬性名=值
            this.name=name;
            this.age=age;
            this.say=function(){
            }
        }
        //調(diào)用 : var obj=new 構(gòu)造函數(shù)(參數(shù))
        
        var obj= new A("wang",19);
        console.log(obj);
        console.log( obj instanceof Object );//true
        console.log( obj instanceof A );//true

五、原型模式

 //原型優(yōu)點:共同/相同的屬性、方法不重復(fù) 有從屬關(guān)系
        //缺點:原型上的屬性不可單獨改變
        function Fn(){
            
        }
        Fn.prototype.name="王";
        Fn.prototype.age=19;

        var obj=new Fn();
        console.log(obj);
        /*
        修改obj.__proto__.name
        obj.__proto__.name 發(fā)生變化
        obj2.__proto__.name 也發(fā)生變化
        obj和obj1 共用__proto__對象
        公共/相同的屬性、方法放在構(gòu)造函數(shù).prototype上 實現(xiàn)代碼不重復(fù)
        */
            obj.__proto__.name="李"
            console.log( obj.__proto__.name  );

            var obj2=new Fn();
            console.log(obj2);
            console.log(obj.__proto__.name);

推薦好課:

小白學(xué)前端:JavaScript零基礎(chǔ)入門到進階(2020版)

JavaScript實戰(zhàn):動態(tài)網(wǎng)站開發(fā)

JavaScript交互式網(wǎng)站實戰(zhàn)開發(fā)


0 人點贊