suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Javascript 类的疑惑

最近在看 Javascript 的类

var Class = function(){
    var klass = function(){
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function(){};
    return klass;
}
var Person = new Class;
var person = new Person;

第一个 new Class 怎么理解呢,是不是这里 new Class 相当于只是执行了 Class, 如果是这样为什么不直接写 var Person = Class(); var person = new Person;

黄舟黄舟2838 Tage vor348

Antworte allen(5)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-10 14:55:32

    当对一个函数使用new操作符的时候,函数内部的this会指向一个新建的对象。如果函数没有返回值,返回值就会被设定为这个新建的对象。相反,如果这个函数有返回值,那么就会按照返回值返回。

    所以,以这题的执行效果而言:是的。两种方法没有区别。

    Class()new Class()主要区别是,后者的this指针指向了一个新的Object,并且该Objectconstructor指向Class。不过在本题中,完全没有用到这个 this,所以你看不到有何区别。

    JavaScript没有“类”的概念,但是有“对象”的概念,是一种很特殊的语言,从无类的角度诠释了“面向对象”。顺便推销一下我的译作《JavaScript面向对象编程指南(第2版)》,希望对你的学习有帮助。

    对了,new Class;new Class();这两个操作符是等价的,没有区别。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 14:55:32

    当构造函数返回一个对象的时候,new 操作符返回这个对象,而非原始构造函数产生的实例。参见:new 运算符。

    在这个例子里 new Class 和 Class() 的效果是一样的。

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:55:32

    javascript 沒有「類」的概念。

    javascript 的類是從其它語言借用的,是一種模擬。

    所以在理解 javascript 的「類」的時候,不要忘記它只是對 prototype 機制的一種抽象。

    這裏,Class 這一函數(構造器)返回的是一個對象,所以爲構造器創建的對象被拋棄而採用構造器返回的對象。

    其實一般是這樣寫:

    var Person = function() {
        var Person = function() {
            this.init.apply(this, arguments);
        };
        Person.prototype = {
            constructor: Person,
            init: function() {}
        };
        return Person;
    }();
    
    var person = new Person;
    

    之所以你的例子用 new Class 而不用 Class(),其實是一種類似語法糖的東西,暗示 new Class 返回的是一個類而非任意東西。

    這和我們用 Person = function() {}() 而不用 Person = (function() {}()) 是一樣的。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-04-10 14:55:32

    第一个 new Class 怎么理解呢?
    new 一个函数,被new出来的函数叫做构造函数,可以理解为执行了class但是new的特点是
    创建一个新的对象
    将构造函数的作用域赋给这个新对象,this指向这个对象
    默认返回这个新对象

    如果不用new的话,这里面的对象全部指向window,也就无从谈起继承,

    在backbone里也有类似的代码,这段代码帮你初始化一些参数而以。

    Antwort
    0
  • 阿神

    阿神2017-04-10 14:55:32

    第一个是新建一个类,第二个是新建一个实例。

    Antwort
    0
  • StornierenAntwort