相关疑难解决方法(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万
查看次数

使用原型的优点,直接在构造函数中定义方法?

我想知道使用这些中的任何一个是否有任何优势,我应该走哪条路?

构造方法:

var Class = function () {

    this.calc = function (a, b) {
        return a + b;
    };

};
Run Code Online (Sandbox Code Playgroud)

原型方法:

var Class = function () {};

Class.prototype.calc = function (a, b) {
    return a + b;
};
Run Code Online (Sandbox Code Playgroud)

我不喜欢这样,使用原型,方法定义与类分开,我不知道是否有任何特定的原因我应该使用它而不是第一种方法.

此外,使用函数文字定义"类"是否有任何好处,而不仅仅是函数定义:

var Class = function () {};
Run Code Online (Sandbox Code Playgroud)

VS

function Class () {};
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript oop prototype

293
推荐指数
3
解决办法
8万
查看次数

在Javascript中扩展对象

我目前正在从Java转换为Javascript,我有点难以弄清楚如何按照我希望的方式扩展对象.

我见过互联网上有几个人使用一种名为extend on object的方法.代码如下所示:

var Person = {
   name : 'Blank',
   age  : 22
}

var Robot = Person.extend({
   name : 'Robo',
   age  : 4
)}

var robot = new Robot();
alert(robot.name); //Should return 'Robo'
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使这项工作?我听说你需要写

Object.prototype.extend = function(...);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使这个系统工作.如果不可能,请告诉我另一个扩展对象的替代方案.

javascript extends prototype function object

151
推荐指数
10
解决办法
25万
查看次数

如何从javascript中的类继承?

在PHP/Java中可以做到:

class Sub extends Base
{
}
Run Code Online (Sandbox Code Playgroud)

并且Super类的所有公共/受保护方法,属性,字段等自动成为Sub类的一部分,必要时可以覆盖它.

Javascript中的等价物是什么?

javascript oop

96
推荐指数
6
解决办法
8万
查看次数

Node.js - 继承自EventEmitter

我在很多Node.js库中看到了这种模式:

Master.prototype.__proto__ = EventEmitter.prototype;
Run Code Online (Sandbox Code Playgroud)

(来源这里)

有人可以用一个例子向我解释,为什么这是一个如此常见的模式,什么时候它很方便?

node.js eventemitter

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

什么是Javascript中的多态?

我已经阅读了一些我可以在互联网上找到的关于多态性的文章.但我认为我无法理解它的含义及其重要性.大多数文章没有说明为什么它很重要以及如何在OOP中实现多态行为(当然在JavaScript中).

我无法提供任何代码示例,因为我还没有想到如何实现它,所以我的问题如下:

  1. 它是什么?
  2. 为什么我们需要它?
  3. 这个怎么运作?
  4. 如何在javascript中实现这种多态行为?

我有这个例子.但是很容易理解这段代码会产生什么结果.它没有给出关于多态性本身的任何清晰的想法.

function Person(age, weight) {
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" kilo.";
    }
}
function Employee(age, weight, salary) {
    this.salary = salary;
    this.age = age;
    this.weight = weight;
    this.getInfo = function() {
        return "I am " + this.age + " years old " +
        "and weighs " + this.weight +" …
Run Code Online (Sandbox Code Playgroud)

javascript oop polymorphism functional-programming parametric-polymorphism

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

JavaScript - 对象文字的优点

我读过它而不是简单地编写一堆函数,我应该使用object literal.

有人可以用例子来解释对象文字的优点,因为到目前为止我还不明白.

谢谢

javascript object-literal

38
推荐指数
3
解决办法
2万
查看次数

John Resig的Javascript继承代码段是否已被弃用?

我正在寻找一种简单的方法来创建两个类,一个继承自另一个类,子类重新定义父方法之一,并在新方法内调用父类.

例如,有一个类,Animal并且Dog,Animal类定义了一个makeSound()确定如何输出声音的方法,然后Dog在其自己的makeSound()方法中覆盖以产生"低音"声音,但同时也调用Animal makeSound()来输出那个低音.

我在这里查看了John Resig的模型,但它使用了arguments.calleeECMA脚本中明显折旧的本机属性.这是否意味着我不应该使用John Resig的代码?

使用Javascript的原型继承模型编写动物/狗代码的简洁方法是什么?

javascript oop inheritance prototypal-inheritance

24
推荐指数
2
解决办法
6446
查看次数

原型为数组的Javascript对象成员将被所有类实例共享

之前有人注意到这种行为吗?这真的让我失望......我原本希望原型数组对每个类实例都是私有的,而不是在所有类实例之间共享.

有人可以验证这是正确的行为,并可能更详细地解释这种行为?

请注意注释的代码以及它如何影响脚本的行为.

<html>
<head>

<script type="text/javascript">

function print_r( title, object ) {

    var output = '';
    for( var key in object ) {

        output += key + ": " + object[ key ] + "\n";

    }

    output = title + "\n\n" + output;

    alert( output );

}

function Sandwich() {

    // Uncomment this to fix the problem
    //this.ingredients = [];

}

Sandwich.prototype = {

    "ingredients" : [],
    "addIngredients" : function( ingArray ) {

        for( var key in ingArray ) …
Run Code Online (Sandbox Code Playgroud)

javascript arrays oop prototype class

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

Class.prototype.method vs this.prototype.method

我一直看到Class.prototype.method的例子,但从来没有看过this.prototype.method的例子.例如:

function Class() {
    this.prototype.method = function() {
        alert("is this allowed?");
    };
}
Run Code Online (Sandbox Code Playgroud)

VS

function Class() {}
Class.prototype.method = function() {
    alert("traditional example");
};
Run Code Online (Sandbox Code Playgroud)
  1. this.prototype存在吗?
  2. 它与Class.prototype相同吗?
  3. 继承怎么样?

javascript prototype

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