相关疑难解决方法(0)

JavaScript .prototype如何工作?

我不是那种动态编程语言,但是我写了很多JavaScript代码.我从来没有真正了解这个基于原型的编程,有没有人知道这是如何工作的?

var obj = new Object();
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Run Code Online (Sandbox Code Playgroud)

我记得很久以前我和人们进行了很多讨论(我不确定我在做什么)但是据我所知,没有一个类的概念.它只是一个对象,这些对象的实例是原始的克隆,对吧?

但是JavaScript中这个".prototype"属性的确切目的是什么?它与实例化对象有什么关系?

更新:正确的方式

var obj = new Object(); // not a functional object
obj.prototype.test = function() { alert('Hello?'); }; // this is wrong!

function MyObject() {} // a first class functional object
MyObject.prototype.test = function() { alert('OK'); } // OK
Run Code Online (Sandbox Code Playgroud)

这些幻灯片也非常有帮助.

javascript dynamic-languages prototype-oriented

1988
推荐指数
21
解决办法
49万
查看次数

在ES6类中声明静态常量?

我想在a中实现常量class,因为在代码中找到它们是有意义的.

到目前为止,我一直在使用静态方法实现以下解决方法:

class MyClass {
    static constant1() { return 33; }
    static constant2() { return 2; }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我知道有可能摆弄原型,但许多人建议不要这样做.

有没有更好的方法在ES6类中实现常量?

javascript class constants ecmascript-6

272
推荐指数
7
解决办法
21万
查看次数

JavaScript基于原型的继承的好例子

我用OOP语言编程已超过10年,但我现在正在学习JavaScript,这是我第一次遇到基于原型的继承.通过学习优秀的代码,我倾向于学得最快.什么是正确使用原型继承的JavaScript应用程序(或库)的精心编写的示例?您能否(简要地)描述原型继承的使用方式/原因,我知道从哪里开始阅读?

javascript prototypal-inheritance

88
推荐指数
7
解决办法
9万
查看次数

在类方法之外声明一个类属性

了解如何在构造函数中声明x和y:

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在函数之外声明属性,例如:

class Point {
  // Declare static class property here
  // a: 22
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我想分配给22,但我不确定我是否可以在构造函数之外做但仍然在类中.

javascript ecmascript-6

15
推荐指数
1
解决办法
1万
查看次数

静态propTypes在ES6下不起作用

我想为道具添加一些规则:

import React, { Component } from 'react'

export default class App extends Component {
  static propTypes = { name: React.PropTypes.string.isRequired };

  render() {
    return(
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了一个错误:

Warning: Failed prop type: Required prop `name` was not specified in `App`.
Run Code Online (Sandbox Code Playgroud)

我有这个配置为babel:

{
  "presets": ["es2015", "react"],
  "plugins": ["transform-runtime", "transform-class-properties"]
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

UPD.更改代码:使用static

babel ecmascript-6 reactjs

15
推荐指数
1
解决办法
3万
查看次数

ES6类/实例属性

这将是一个相对较长的问题,但我真的很想理解.最后的问题在问题的底部提出.

我已经阅读了这个问题的答案:
ES6类可变替代品

关于为什么在ES6中不接受这种语法的问题:

class MyClass {
    const MY_CONST = 'string';
    constructor(){
        this.MY_CONST;
    }
}
Run Code Online (Sandbox Code Playgroud)

1)第一个答案提到:

请记住,类定义定义了原型方法 - 在原型上定义变量通常不是你做的事情.

我不明白这个; 基于类的语言中的静态变量似乎与JS中原型上定义的属性具有相同的目的.
显然不是像人名这样的实例变量,但它可以是车辆的默认MAX_SPEED,或者是所有实例共享的计数器.如果实例未覆盖原型的MAX_SPEED,则返回默认值.这不是静态变量的确切目的吗?

2)以下帖子(ES6规范提案)制定:

(故意)没有直接声明方式来定义原型数据属性(方法除外)类属性或实例属性.需要在声明之外创建类属性和原型数据属性.

我没有看到在类本身(构造函数之外)中使用默认值声明/初始化实例/类变量的实际区别?如果它在原型上有什么关系?如果它涉及一个具有默认值的实例变量,该默认值可能适用于所有实例(但仍可覆盖),我看不出有什么问题.那究竟是什么意思呢?

3)关于ES6类变量替代问题的第二个答案让我感到困惑(尽管不是技术专家).

从类方法中可以将变量作为this.constructor.foo(或MyClass.foo)访问 .

通常无法从类实例访问这些类属性.即MyClass.foo让"酒吧",但new MyClass().fooundefined

这表明显然可以在类(或底层函数)上声明一个类变量,如本例所示:http://www.es6fiddle.net/iehn0hxp/

class Car{
  constructor(){
    //Set instance variable 
    this.instance_var = 220; 
    //Set class variable 
    this.constructor.class_var = 240; 
  }
}

var Mercedes = new Car(); 
var Audi = new Car(); 

//Instance property 
console.log(Mercedes.instance_var); //220 
//Class property …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6

5
推荐指数
1
解决办法
1万
查看次数

React类中的es6函数声明

用const声明的函数与不使用let或const声明的函数与在ES6类中否则声明的函数之间有什么区别?

class App extends Component {

    submitFood = () =>{
        // some code
    }
Run Code Online (Sandbox Code Playgroud)

上面的为什么可以正常工作,但是下面的声明给出了错误:

class App extends Component {

    const submitFood = () =>{
        // some code
        }
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 reactjs

5
推荐指数
2
解决办法
1201
查看次数

如何在 JS 类中定义静态变量

我正在构建一个静态类来将数据存储在一个数组中,我想声明一个静态变量,但我不知道如何在 javascript 上执行此操作。

JS代码:

class GCache {

    // Define cache variable
    static cache = {}; // <--- that is what i don't know how to do

    /**
     * Check if data is on cache
     * @param {*} id 
     */
    static isOnCache(id){
        return this.cache.hasOwnProperty(id);
    }

    /**
     * Add data to cache
     * @param {*} id 
     * @param {*} json 
     */
    static addToCache(id, json){
        if(this.isOnCache(id)) return;
        this.cache[id] = json;
    }

    /**
     * Obtain data from cache
     * @param {*} id 
     */
    static …
Run Code Online (Sandbox Code Playgroud)

javascript class

5
推荐指数
1
解决办法
3139
查看次数

在 ReactJS 中封装第三方 JS 库

我正在尝试学习如何使用 Google Map 或 BrainTree Dropin UI 等 3rd 方 API,并将它们制作成 ReactJS 组件。

在我的研究过程中,我遇到了这样一个包含 Braintree(支付网关)的项目示例 - https://github.com/Cretezy/braintree-web-drop-in-react/blob/master/src/index。 js

不幸的是我无法理解代码,特别是我无法理解第 22-23 行中的语法。它们看起来像装饰器,但我不确定和/或它们在这种情况下如何工作。

reactjs

4
推荐指数
1
解决办法
2955
查看次数

如何将静态属性添加到ES6类

我们非常清楚地知道class的ES6也带来了:static,get以及set功能:

但是,似乎static关键字仅保留给方法:

class Person {

    // static method --> No error
    static size(){
    }   
  // static attribute --> with Error
    static MIN=10;
}
Run Code Online (Sandbox Code Playgroud)

如何static在ES6类中编写属性以获得类似静态属性的内容MIN.

我们知道我们可以在类定义后添加以下指令:

Person.MIN=10; 
Run Code Online (Sandbox Code Playgroud)

但是,我们的范围是找到在类块中编写此指令的方法

javascript oop static attributes ecmascript-6

3
推荐指数
1
解决办法
4279
查看次数

React-Native 将 var 添加到视图标签中

我有一个包含字符串和变量的类:

class Number extends Component{
    var num = 8
    render(){
        return{
            <Text>The number is: </Text> + num
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误

Unexpected token (31:6)
var num = 8
    ^
Run Code Online (Sandbox Code Playgroud)

有什么方法可以让类在使用时同时返回文本和变量?

<Number/>
Run Code Online (Sandbox Code Playgroud)

javascript react-native

1
推荐指数
1
解决办法
2697
查看次数

如何在ES6类中设置原型变量?

class SomeClass {

  someMethod() {
    // some code
  }

  someMoreMethod() {
    // some more code
  }

}

var someInstance = new someClass();
Run Code Online (Sandbox Code Playgroud)

我们知道,在上面的代码,方法someMethodsomeMoreMethod将得到重视的原型someInstance对象.但是,如果我们想要将一些属性(而不是方法)附加到原型上,该怎么办?我尝试执行以下操作,但它会抛出错误:

class SomeClass {

    someProperty = "Some Value";

    someMethod() {
      // some code
    }

    someMoreMethod() {
      // some more code
    }

 }
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 es6-class

0
推荐指数
1
解决办法
52
查看次数