精华内容
下载资源
问答
  • 1.js构造函数返回值问题 构造函数本不应该,不需要有返回值,实际执行的返回值就是此构造函数的实例化对象 但是在 js 中构造函数可以有返回值也可以没有,没有时,和正常的构造函数一样,返回实例化对象 返回值是非...

    1.js构造函数返回值问题

    1. 构造函数本不应该,不需要有返回值,实际执行的返回值就是此构造函数的实例化对象
    2. 但是在 js 中构造函数可以有返回值也可以没有,没有时,和正常的构造函数一样,返回实例化对象
    3. 返回值是非引用类型,如基本类型(string,number,boolean,null,undefined)则与无返回值相同
    4. 返回值是是引用类型,则实际返回值为这个引用类型,就会出现问题

    注意:构造函数中的 this 指向实例化的对象,所以构造函数通过 this 给实例添加属性和方法

    function foo(name){
        return name
    }
    // 1. 返回值为非引用类型
    // a为foo构造函数实例化出来的一个空对象
    var a = new foo('字符串')
    console.log(a)                // foo{}
    console.log(typeof a)         // 'object'
    a.__proto__ == foo.prototype  // true
    
    // 2. 返回值为引用类型
    // b为返回的引用对象,不属于构造函数的实例了
    var b = new foo({name:'对象'})
    console.log(b)                // {name:'对象'}
    console.log(typeof b)         // 'object'
    b.__proto__ == foo.prototype  // false
    

    2.牛客网面试题

    1. 我们来看下牛客网的一道题
    2. String(‘foo’) 返回的是string类型,非引用类型,所以不会影响,因为构造函数没有属性,返回一个空对象
    3. new String(‘foo’) 返回的是字符串对象,所以会返回该字符串对象
    console.log( 'foo' == new function(){ return String('foo') } )      // false
    console.log( 'foo' == new function(){ return new String('foo') } )  // true
    
    展开全文
  • 如果一个函数的返回值是一个引用类型(数组、对象或者函数)的数据,那么将这个函数作为构造函数用new运算符执行构造时,运算结果将被它返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回...

    如果一个函数的返回值是一个引用类型(数组、对象或者函数)的数据,那么将这个函数作为构造函数用new运算符执行构造时,运算结果将被它返回值取代,这时候,构造函数体内的this值丢失了,取而代之的是被返回的对象。

    例如:

    function Example()

    {

       this.child=0;

     

    return function()

              {alert(1);}

    }

    var instant=new Example();

    alert(instant.child);//显示undefined

     

     

    展开全文
  • 构造函数返回值传统语言中,构造函数是没有返回值的。构造函数与普通函数的区别...然而在JavaScript构造函数可以有返回值也可以没有。 没有返回值的情况像其他传统语言一样,返回实例化的对象 function Person(){

    构造函数的返回值

    传统语言中,构造函数是没有返回值的。构造函数与普通函数的区别可以认为是:构造函数中没有return语句,普通函数可以return;构造函数中使用this定义成员变量和成员方法,普通函数中不使用this关键字定义成员变量和方法。然而在JavaScript中构造函数可以有返回值也可以没有。

    1.没有返回值的情况像其他传统语言一样,返回实例化的对象

    function Person(){
    
        this.name="monster1935";
        this.age='24';
        this.sex="male";
    
    }
    console.log(Person());  //undefined
    console.log(new Person());//Person {name: "monster1935", age: "24", sex: "male"}
    

    2.如果存在返回值则检查其返回值是否为引用类型,如果为非引用类型,如(string,number,boolean,null,undefined),上述几种类型的情况与没有返回值的情况相同,实际返回实例化的对象

    function Person(){
    
        this.name="monster1935";
        this.age='24';
        this.sex="male";
    
        return "monster1935";
    
    }
    console.log(Person());  //monster1935
    console.log(new Person());//Person {name: "monster1935", age: "24", sex: "male"}

    3.如果存在返回值是引用类型,则实际返回该引用类型

    function Person(){
    
        this.name="monster1935";
        this.age='24';
        this.sex="male";
    
        return {
            name:'Object',
            age:'12',
            sex:'female'
        }
    
    }
    console.log(Person());  //Object {name: "Object", age: "12", sex: "female"}
    console.log(new Person());//Object {name: "Object", age: "12", sex: "female"}
    展开全文
  • 构造函数返回值问题

    2021-04-08 14:03:17
    考察的是构造函数返回值的问题, 每个函数都有返回值,如果使用了return语句,则返回return后跟的值,如果没有使用return,则默认返回undefined. 特别的,如果这个函数是构造函数,则默认返回this对象,如果构造...
    1、请问p.name是:
    var fun = function(){
        this.name = 'ling';
        return {
        	name: 'ge'
        };
    }
    
    var p = new fun();
    

    考察的是构造函数的返回值的问题, 每个函数都有返回值,如果使用了return语句,则返回return后跟的值,如果没有使用return,则默认返回undefined.
    特别的,如果这个函数是构造函数,则默认返回this对象,如果构造函数内使用了return语句,并且return后跟的是一个对象,则这个构造函数返回的是这个对象,否则返回this.

    所以题中的p = {name: 'ge'},因此p.name=ge

    2、请问p.name是:
    var fun = function(){
        this.name = 'ling';
    
        return 'ge';    
     }
    
    var p = new fun();
    

    由于返回值不是对象,因此,返回this。输出结果:p = {name: 'ling'},因此,输出结果为ling

    修改prototype上的属性问题
    1、请问a.info.name和b.info.name分别是
    var fun = function(){}
    
    fun.prototype = {
        info : {
        	name : 'linge',
        	age : 12
        }
    }
    
    var a = new fun();
    var b = new fun();
    
    a.info.name = 'hello';
    b.info.name = 'tom';
    

    两个都输出tom。首先你要知道原型模式的执行流程:

    1.先查找构造函数实例里的属性或方法,如果有,就立即返回。
    2.如果构造函数的实例没有,就去它的原型对象里找,如果有,就立即返回
    

    由于构造函数中没有info属性,因此,a.info.name = ‘hello’;就是给原型的info的name设置为hello。首先要查找有没有info属性,才能给实例的某个属性赋值,于是找到了原型上。第二次,还是构造函数没有,去原型找,b.info.name = 'tom’将原型的info的name改为tom,由于info是对象,引用地址相同,最终二者获取结果都是tom。

    a.info.name这段代码,首先去访问了实例对象本身是否有info这个对象,发现没有就去原型上查找了,发现原型上有,所以地址共享了得到的值都是Tom;

    2、请问a.info.name和b.info.name分别是:
    var fun = function(){
        this.info = {
        	name : 'linege',
        	age : 20
        }
    }
    var a = new fun();
    var b = new fun();
    
    a.info.name = '功夫';
    b.info.name = '熊猫';
    

    a.info.name功夫b.info.name熊猫

    由于构造函数有,就不再去原型查找,new之后都会创建新的实例对象,他们this各自指向各自创建新对象中。互不影响。因此,输出各自的。

    3、请问a.name和b.name分别是:
    var fun = function(){}
    
    fun.prototype = {    
        name : 'ling',    
        age : 20
    }
    
    var a = new fun();
    var b = new fun();
    
    a.name = 'nginx';
    b.name = 'mobx';
    

    a.name输出nginx,b.name输出mbox。

    a.name实例本身没有,给当前a这个实例对象执行赋值操作,没有去访问原型上的name。就相当于第1题先访问了原型上的info对象,第3题没有访问过程,只是在实例上添加了name属性值。

    4、请问a.info.name和b.info.name分别是:
    var fun = function(){
        this.info = {
        	name : 'ling',
       		 age : 20
        }
    }
    
    fun.prototype = {
        info : {
        	name : 'ling',
        	age : 20
        }
    }
    
    var a = new fun();
    var b = new fun();
    
    a.info.name = 'dog';
    b.info.name = 'cat';
    

    a.info.namedogb.info.namecat。 这个是由于自身有info属性,都不会去原型找,由于new以后各自info地址都不同,因此,输出各自的。

    展开全文
  • javascript设计模式和构造函数返回值   工厂模式  function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = f
  • 自定义构造函数(Custom Constructor Functions) 除了对象字面量模式和内置的构造函数,你可以用你自己的构造函数创建对象; var adam = new Person("Adam"); adam.say(); // "I am Adam"这种新模式和Java里用Person...
  • js 构造函数返回值

    千次阅读 2018-10-26 19:54:20
    而在js构造函数可以有返回值也可以没有。 没有返回值则按照其他语言一样返回实例化对象。 若有返回值则检查其返回值是否为引用类型。如果是非引用类型,如基本类型(string,number,boolean,null,undefined)则...
  • 此文转自:http://blog.csdn.net/xkyle/archive/2008/11/25/3368597.aspx//没有返回值functionTest0(){this.name='test0';}vartest0=newTest0;//debugger;alert(test0);//输出[Object]...
  • 传统语言中,构造函数是没有返回值的。构造函数与普通函数的区别可以认为...然而在JavaScript构造函数可以有返回值也可以没有。1.没有返回值的情况像其他传统语言一样,返回实例化的对象:function Person(){ this.n
  • 首先明确一点:javascript构造函数是不需要有返回值的,这一点跟java很类似。可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句;构造函数中会使用this关键字定义...
  • 而在js构造函数可以有返回值也可以没有。 1、没有返回值则按照其他语言一样返回实例化对象。 2、若有返回值则检查其返回值是否为引用类型。如果是非引用类型,如基本类型(string,number,boolean,null,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,093
精华内容 29,237
关键字:

js构造函数返回值