如何获得对象的具体值?

时间:2014-09-23 11:44:36

标签: javascript

我写道:

function myObj() {

    return 7;

}

console.log(new myObj());

它返回:

 myObj {}

为什么会这样?

如何让new myObj()返回给我:7

我对new myObj()的规范感兴趣而没有调用其他属性?

此任务:

new myObj() // return 1;
new myObj() // return 2;

new myObj() + new myObj() = // return 7;

2 个答案:

答案 0 :(得分:3)

new myObj创建并返回一个新对象,即使您的函数中有return 7new运算符专门用于创建对象,并且具有完全忽略构造函数的返回值的有趣行为,除非它是非null对象引用;相反,new返回它创建的对象。 (如果执行从构造函数返回非null对象引用,它将覆盖new的默认行为;用例很少见。)

如果您只想调用该函数并获取其返回值,请不要使用new

console.log(myObj());

如果要创建一个包含属性的对象,并将该属性设置为7,然后打印它,则需要创建属性:

function myObj() {
    this.thePropertyName = 7;
}

...然后使用它:

var o = new myObj();
console.log(o.thePropertyName);

...或:

console.log(new myObj().thePropertyName);

...但是你没有充分的理由创造和释放一个物体。


重新编辑,会更改 显着 的问题:

  

这个任务:

new myObj() // return 1; new myObj() // return 2;

new myObj() + new myObj() = // return 7;

这是一个奇怪的要求。它像这样崩溃:

  1. 每次拨打new myObj时,请保存一个号码(以1开头)。

  2. 在对象上使用+运算符时,请返回该数字。

  3. 可以执行此操作,方法是使用公共计数器,实例上的值,并覆盖toStringvalueOf的默认实现;请参阅代码中的注释:

    
    
    (function() {
      "use strict";
    
      // Use a scoping function to build `myObj` so that we
      // keep the counter private
      var myObj = (function() {
        // The counter
        var counter = 0;
    
        // The `myObj` function we'll return
        function myObj() {
          // Increment the counter, remember the number
          this.value = ++counter;
        }
        
        // When a coercion to number is preferred, JavaScript will
        // use the valueOf function
        myObj.prototype.valueOf = function() {
          return this.value;
        };
        
        // When a coercion to string is preferred, JavaScript will
        // use the toString function
        myObj.prototype.toString = function() {
          return String(this.value);
        };
    
        // Return `myObj` from our scoping function to export it
        return myObj;
      })();
    
      // Using it
      display(new myObj());               // "1"
      display(new myObj());               // "2"
      display(new myObj() + new myObj()); // 7
    
      // Utility function
      function display(msg) {
        var p = document.createElement("p");
        p.innerHTML = String(msg);
        document.body.appendChild(p);
      }
    })();
    
    
    

答案 1 :(得分:0)

在javascript中,函数也是一个类。调用像myObj()这样的函数将返回值7。 但是使用new调用会克服该对象的实例并返回该对象,因此不会返回7。