zoukankan      html  css  js  c++  java
  • javascript创建对象的相关问题

    javascript创建对象的方法有很多种,一般来说,推荐使用对象字面量来创建对象。

    对象构造函数捕捉

    使用new Object来创建对象,可能会带来一些问题:

    var o = new Object();
    console.log(o.constructor === Object);//true
    
    var o = new Object(1);
    console.log(o.constructor === Object);//false
    console.log(o.constructor === Number);//true
    
    var o = new Object("hi");
    console.log(o.constructor === String);//true
    console.log(typeof o.substring);//'function'

    自定义构造函数
    使用new创建对象时,首先创建一个空对象,然后将其[[prototype]]指向构造函数的原型对象,然后执行构造函数,将this的属性和方法添加到创建的空对象里面,最后隐形返回这个对象:

    var Person = function(){
        //var this={};
        this.name = "Rose";
        this.sayName = function(){
            console.log("I am"+this.Name);
        };
        //return this;
    };


     

    构造函数的返回值:

    var Person = function(){
        this.name = "Rose";
        var that = {};
        that.name = "Mary";
        return that;
    };
    
    var person = new Person();
    console.log(person.name);//"Mary"

    就是说,如果返回的是一个对象,将覆盖默认的对象,但是如果返回的不是对象,而是值,虽然不会造成错误,但是函数会忽略该值。

    强制使用new的模式:

    有时候,如果忘记使用new,将造成一些错误,为了避免这类错误,可以使用的写法:

    var Person = function(nameStr){
        var that = {};
        that.name = nameStr;
        return that;
    };
    
    var girl = new Person("Mary");
    console.log(girl.name);//"Mary"
    
    var boy = Person("Mike");
    console.log(boy.name);//"Mike"
  • 相关阅读:
    YTU 2959: 代码填充--雨昕学矩阵
    YTU 2958: 代码填充--雨昕学画画
    YTU 2960: 改错题--小鼠标,你要干什吗?
    YTU 2975: 我的编号
    YTU 2979: MathBook类--多态
    linux命令学习:echo详解,格式化输出,不换行输出
    linux shell date 时间运算以及时间差计算方法
    C语言中mktime函数功能及用法
    Posix线程编程指南(3)
    Posix线程编程指南(2)
  • 原文地址:https://www.cnblogs.com/linda586586/p/4234639.html
Copyright © 2011-2022 走看看