相关疑难解决方法(0)

使用"Object.create"而不是"new"

Javascript 1.9.3/ECMAScript 5介绍Object.create道格拉斯·克罗克福德等人长期以来一直在倡导.如何new在下面的代码中替换Object.create

var UserA = function(nameParam) {
    this.id = MY_GLOBAL.nextId();
    this.name = nameParam;
}
UserA.prototype.sayHello = function() {
    console.log('Hello '+ this.name);
}
var bob = new UserA('bob');
bob.sayHello();
Run Code Online (Sandbox Code Playgroud)

(假设存在MY_GLOBAL.nextId).

我能想到的最好的是:

var userB = {
    init: function(nameParam) {
        this.id = MY_GLOBAL.nextId();
        this.name = nameParam;
    },
    sayHello: function() {
        console.log('Hello '+ this.name);
    }
};
var bob = Object.create(userB);
bob.init('Bob');
bob.sayHello();
Run Code Online (Sandbox Code Playgroud)

似乎没有任何优势,所以我想我没有得到它.我可能过于新古典主义了.我应该如何使用MY_GLOBAL.nextId创建用户'bob'?

javascript constructor new-operator object-create

364
推荐指数
8
解决办法
17万
查看次数

JavaScript继承:Object.create vs new

在JavaScript中,这两个示例之间的区别是什么:

先决条件:

function SomeBaseClass(){
}

SomeBaseClass.prototype = {
    doThis : function(){
    },

    doThat : function(){
    }
}
Run Code Online (Sandbox Code Playgroud)

继承示例A使用Object.create:

function MyClass(){
}

MyClass.prototype = Object.create(SomeBaseClass.prototype);
Run Code Online (Sandbox Code Playgroud)

继承示例B使用new关键字

function MyClass(){
}

MyClass.prototype = new SomeBaseClass();
Run Code Online (Sandbox Code Playgroud)

这两个例子似乎做同样的事情.你什么时候选择一个而不是另一个?

另一个问题:考虑下面链接中的代码(第15行),其中对函数自身构造函数的引用存储在原型中.为什么这有用?

https://github.com/mrdoob/three.js/blob/master/src/loaders/ImageLoader.js

摘录(如果您不想打开链接):

THREE.ImageLoader.prototype = {

    constructor: THREE.ImageLoader
}
Run Code Online (Sandbox Code Playgroud)

javascript inheritance object-create

120
推荐指数
3
解决办法
4万
查看次数

使用`Object.create`进行继承的好处

我一直试图围绕Object.createECMAScript 5中引入的新方法.

通常,当我想使用继承时,我会这样做:

var Animal = function(name) { this.name = name; }
Animal.prototype.print = function() { console.log(this.name); }

var Dog = function() 
{ 
  return Animal.call(this, 'Dog'); 
}

Dog.prototype = new Animal();
Dog.prototype.bark = function() { console.log('bark'); }
Run Code Online (Sandbox Code Playgroud)

我只是将一个新创建的Animal对象分配给Dog的原型,一切都像魅力:

var dog1 = new Dog();
dog1.print(); // prints 'Dog'
dog1.bark(); // prints 'bark'
dog1.name; //prints 'Dog'
Run Code Online (Sandbox Code Playgroud)

但人们(没有解释)说这Dog.prototype = new Animal();不是继承的工作方式,我应该使用Object.create方法:

Dog.prototype = Object.create(Animal.prototype);
Run Code Online (Sandbox Code Playgroud)

这也有效.

使用的好处是什么,Object.create或者我错过了什么?

更新:有人说这Dog.prototype = Animal.prototype;也可以.所以现在我完全糊涂了

javascript

52
推荐指数
4
解决办法
4779
查看次数

在Derived.prototype = new Base使用'new'关键字的原因是什么

以下代码的作用如下:

WeatherWidget.prototype = new Widget;
Run Code Online (Sandbox Code Playgroud)

哪里Widget是构造函数,我想用新函数扩展Widget'类' WeatherWidget.

什么是new关键字在那里做什么以及如果被遗漏会发生什么?

javascript constructor prototype

50
推荐指数
3
解决办法
7382
查看次数