Javascript的新实例

Javascript的新实例,javascript,new-operator,instanceof,Javascript,New Operator,Instanceof,嗨,我对Javascript还是相当陌生的。我对这个新词以及它在决定instanceof操作符输出中的作用有点困惑 案例1。返回对象文字 var Dog=function(){ return{legs:4,bark:alert("BOW!!")};}; var luna=Dog(); luna instanceof Dog;//why false here false var luna=new Dog(); luna instanceof Dog;//why false here fal

嗨,我对Javascript还是相当陌生的。我对这个新词以及它在决定instanceof操作符输出中的作用有点困惑

案例1。返回对象文字

var Dog=function(){
return{legs:4,bark:alert("BOW!!")};};

var luna=Dog();

luna instanceof Dog;//why false here
false

var luna=new Dog();

luna instanceof Dog;//why false here
false
案例2:现在,我什么也不做,而不是返回object literal,

var Dog=function(){
};
var luna=Dog();

luna instanceof Dog
false

var luna=new Dog();

luna instanceof Dog;//why true here
true
因为你:

  • 未使用新的
    运算符
  • 返回一个简单对象
  • 因为您返回了一个简单对象,它覆盖了
    new
    操作符创建的对象

    因为你:

  • 是否使用了新的操作员
  • 未重写返回值
  • 因为你:

  • 未使用新的
    运算符
  • 返回一个简单对象
  • 因为您返回了一个简单对象,它覆盖了
    new
    操作符创建的对象

    因为你:

  • 是否使用了新的操作员
  • 未重写返回值

  • 案例1:

    var Dog=function(){
    return{legs:4,bark:alert("BOW!!")};};
    
    var luna=Dog();
    luna instanceof Dog;
    false
    
    var Dog=function(){
    };
    var luna=Dog();
    
    这里没有实例化任何东西,它只是一个返回值的函数:一个普通对象。这大致相当于:

    var Dog=function(){
    return new Object();
    }
    
    返回值的构造函数是Object:
    luna。构造函数是
    Object()
    函数

    var luna=Dog();
    luna instanceof Dog;
    false
    
    
    var luna=new Dog();
    
    luna instanceof Dog;
    false
    
    不能实例化返回某些内容的函数

    案例2:

    var Dog=function(){
    return{legs:4,bark:alert("BOW!!")};};
    
    var luna=Dog();
    luna instanceof Dog;
    false
    
    var Dog=function(){
    };
    var luna=Dog();
    
    它被称为一个函数,一个不返回任何内容的函数,实际上它返回未定义的

    luna instanceof Dog
    false 
    
    因为
    undefined
    不是任何东西的实例

    var luna=new Dog();
    
    创建一个新的
    对象
    将Dog作为构造函数
    luna。构造函数
    Dog()


    新操作符用于指定函数应该做什么:没有它,它返回一些东西(或
    未定义的
    ),用它从构造函数实例化一个新对象(这里
    Dog

    案例1:

    var Dog=function(){
    return{legs:4,bark:alert("BOW!!")};};
    
    var luna=Dog();
    luna instanceof Dog;
    false
    
    var Dog=function(){
    };
    var luna=Dog();
    
    这里没有实例化任何东西,它只是一个返回值的函数:一个普通对象。这大致相当于:

    var Dog=function(){
    return new Object();
    }
    
    返回值的构造函数是Object:
    luna。构造函数是
    Object()
    函数

    var luna=Dog();
    luna instanceof Dog;
    false
    
    
    var luna=new Dog();
    
    luna instanceof Dog;
    false
    
    不能实例化返回某些内容的函数

    案例2:

    var Dog=function(){
    return{legs:4,bark:alert("BOW!!")};};
    
    var luna=Dog();
    luna instanceof Dog;
    false
    
    var Dog=function(){
    };
    var luna=Dog();
    
    它被称为一个函数,一个不返回任何内容的函数,实际上它返回未定义的

    luna instanceof Dog
    false 
    
    因为
    undefined
    不是任何东西的实例

    var luna=new Dog();
    
    创建一个新的
    对象
    将Dog作为构造函数
    luna。构造函数
    Dog()


    新操作符用于指定函数应该执行的操作:如果没有它,它将返回一些内容(或
    未定义的
    ),并从构造函数实例化一个新对象(此处
    Dog

    使用
    函数
    关键字来创建类可能会令人困惑。当您调用
    Dog()
    而不使用
    new
    关键字时,您所做的只是调用一个函数;课程不包括在内

    在案例1中,第一个
    luna
    只是
    Dog
    作为普通函数调用时的结果:
    {legs:4,bark:alert(“BOW!!”)}
    ,与
    Dog
    作为一个类无关。第二个
    luna
    也是如此。由于
    Dog
    返回一个对象,它将覆盖通常使用
    new
    创建的“类”实例

    在案例2中,第一个
    luna
    就像案例1中的第一个
    luna
    一样,是一个普通对象。但是第二个
    luna
    Dog
    的一个实例,因为使用了
    new
    关键字,这意味着
    Dog
    被视为一个类而不是一个函数,并且
    Dog
    不会返回任何内容


    (另外,您应该将对象更改为
    {legs:4,bark:function(){alert(“BOW!!”;}}}

    使用
    function
    关键字创建类可能会令人困惑。当您调用
    Dog()
    而不使用
    new
    关键字时,您所做的只是调用一个函数;课程不包括在内

    在案例1中,第一个
    luna
    只是
    Dog
    作为普通函数调用时的结果:
    {legs:4,bark:alert(“BOW!!”)}
    ,与
    Dog
    作为一个类无关。第二个
    luna
    也是如此。由于
    Dog
    返回一个对象,它将覆盖通常使用
    new
    创建的“类”实例

    在案例2中,第一个
    luna
    就像案例1中的第一个
    luna
    一样,是一个普通对象。但是第二个
    luna
    Dog
    的一个实例,因为使用了
    new
    关键字,这意味着
    Dog
    被视为一个类而不是一个函数,并且
    Dog
    不会返回任何内容


    (另外,您应该将对象更改为
    {legs:4,bark:function(){alert(“BOW!!”);}}

    非常准确的解释:非常准确的解释:也许您可以包括新操作符和原型之间的关联(这就是instanceof使用的)。@Quentin那么幕后是这样吗??var Dog=function(){var obj=Object.create(Dog.prototype);返回obj;};也许你可以把新操作符和原型(instanceof使用的就是原型)之间的关联包括在内。@Quentin那么幕后是这样的吗??var Dog=function(){var obj=Object.create(Dog.prototype);返回obj;};是的,我想知道为什么地狱警报一直在执行。很好!。是的,我想知道为什么地狱警报一直在执行。很好!。