据我所知,最新版本的JavaScript (ES6)现在支持创建类。我还理解在ES5和早期版本的JS中创建和使用对象的通常方法是创建对象原型。那么,使用类与下面这样的原型有什么区别,以及何时使用这两种方法?:
类方法:
class Car {
constructor(brand) {
this.carname = brand;
}
printStatement() {
return "I have a " + this.carname + ".";
}
}
mycar = new Car("Toyota");
我试图更好地掌握javascript类的内容和原因。具体来说,我试图理解将一个方法分配给一个原型和使用一个this.methodName =函数.构造函数中的语句。所以,我做了一个实验:
function CThis(){
this.method= function() {
console.log("method of ",this);
};
}
function CProto(){
}
CProto.prototype.method = function() {
console.log("method of ",this);
};
w
请帮助我理解下面的代码。这是拖放对象的脚本。我正在尝试探索它,但却击中了一件事。
我不明白这个方法是如何创建的,比如get x(),set x()等等。get和Set是预定义的对象吗?它实际上是设置对象的值还是获取对象的特定值,就像我们在date对象中一样。
而且在它的声明set x()之间有一个空格,为什么?
我是java脚本的新手,非常感谢你的帮助。
// position strings are "x,y" with no units
get x()
{
return parseInt(this._position.split(',')[0]);
我现在正在学习Javascript课程。我有一个关于类方法覆盖的问题。
不使用function关键字的子类方法
class Class {
m = function() {
console.log('super')
}
}
class Subclass extends Class{
m() {
console.log('sub')
}
}
const si = new Subclass()
si.m() // super
我认为它应该打印出'sub‘,因为Subclas
有人能解释为什么我们需要在原型模式中使用MemberwiseClone()吗?
public abstract class AProtagonistEx
{
int m_health;
int m_felony;
double m_money;
// This is a reference type now
AdditionalDetails m_details = new AdditionalDetails();
public int Health
{
get { return m_health; }
我在Angular.js模块中有一个对象声明:
$scope.test=function(){
};
$scope.test.prototype.push = function(data) {
return data;
};
我这样叫它:
var a = $scope.test.push(1);
console.error(a);
但我知道这个错误:
Error: undefined is not a function (evaluating '$scope.test.push(1)')
为什么我不能访问我通过Prototyp
我刚接触JS (来自C++/等),我突然想到闭包似乎是一种比类更简单、更方便的封装方式。这段代码似乎提供了一种处理封装的简单方法:
function addProperty(o) {
var value;
o["get"] = function() { return value; }
o["set"] = function(v) { value = v; }
}
// create two independent objects which are instances of pseudo-class 'addProperty
这是一个关于backbone.js和javascript的一般性问题,我是javascript的中级:
如果您有一个模型集合,每个模型都连接到视图的一个实例,那么每个模型实例的视图实例是否包含视图的render方法的完整实例?如果是这样的话,有什么推荐的方法来确保渲染方法是“静态的”,这样如果每个模型实例都需要完全相同的渲染函数,就不会浪费内存呢?
在下面的示例中,每个hat实例是否也包含一个render函数的实例,或者它是否指向一个“静态”render函数?
var Hat = Backbone.Model.extend({});
var HatCollection = B
在玩Babel.js和对类进行一些扩展时,我意识到了一些可能是区分公共类继承的好方法(C#,Java.)以及prototype (我在这里并不是说类)继承。
将以下内容提供给基类:
class Menu {
constructor(){}
render(){
this.addObjectsToStage();
}
addObjectsToStage() {
var objects = this.objects.getAllObjects();
for (var category in objects) {
if (objects.has
更新2:这个问题很混乱,因为我认为ES6 class并没有修改.protototype,它是做的,因此这正是我想要的。
我接受了最广泛的答案,即使所有的答案和评论都应该在一开始就指向正确的方向:)
谢谢大家!
旧:
在旧JS中,pre ES6中,当我们学习如何使用以下方法创建“类”时:
function X() {
this.foo = function(){
}
};
var x = new X();
我们还知道,每次执行x = new X();时,我们都会得到'foo‘方法的副本,这是为什么使用prototype是个好主意的原因之一。
现在,在ES6中,我们有了这
我是JavaScript的新手,来自C++/Java背景,所以我更习惯于“经典”语言。
我如何在JavaScript中实现下面的代码,因为它没有类!?
假设我有一个基类A,它定义了派生类B和C应该实现的一些函数,例如(Java ish psuedo-code):
public class A {
public void doSomething();
public void doSomethingElse();
};
public class B extends A {
public void doSomething() {
// does B sort of somet
Lit使用这个reactive element class,我的每个web组件都扩展了它。我搞不懂为什么像elementProperties这样的静态属性在所有扩展Lit基类的web组件上都是不一样的。 See example here 为什么这两个类的静态属性不同?我认为静态属性是在类本身上设置的,在本例中是ReactiveElement。但这里似乎不是这样。我希望elementProperties和here是一样的,工作起来也差不多。 有没有人能告诉我我的想法哪里错了? 更新: OK用typescript重现了这种行为。所以我想我需要研究一下继承和静态属性在JS中是如何工作的。