javascript - 关于 prototype 和 prototypejs

标签 javascript object prototypejs

我想了解这个原型(prototype)。

你们中的任何人都可以阐明

中使用的原型(prototype)之间的区别吗?

https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript关联 和 http://www.prototypejs.org/learn/class-inheritance

提前致谢。

最佳答案

没有区别。 Prototype JS 只是一个使 JavaScript 工作更容易的框架。 prototype 属性在这两种情况下都属于被用作构造函数的函数,这只是 JavaScript。

如果您想了解更多有关 JavaScript 中继承的信息,请阅读以下内容 answer .我个人不喜欢使用任何框架。我使用的唯一框架是 Vapor.js .但是,在使用类时,我通常使用以下 gist :

var Class = function () {
    var slice = Array.prototype.slice;
    var bind = Function.prototype.bind;

    var prototype = Class.prototype = new Function;
    return prototype.constructor = Class;

    function Class(definition, base) {
        var klass = function () {
            var instance = this;

            if (base instanceof Class)

            var uber = function () {
                if (uber instanceof base) return uber;

                arguments = slice.call(arguments);
                arguments = [null].concat(arguments);
                uber = bind.apply(base, arguments);
                uber = new uber;

                var hyper = instance.__proto__ = uber;
                var proto = hyper.__proto__;

                while (proto != parent) {
                    hyper = proto;
                    proto = hyper.__proto__;
                }

                hyper.__proto__ = child;

                return uber;
            };

            var constructor = definition.call(this, uber);
            constructor.apply(this, arguments);
        };

        if (base instanceof Class) {
            klass.__proto__ = base;
            var child = klass.prototype;
            var parent = child.__proto__ = base.prototype;
        } else klass.__proto__ = prototype;

        return klass;
    }
}();

这允许我创建类如下:

var Rectangle = new Class(function () {
    var width;
    var height;

    function constructor(length, breadth) {
        width = length;
        height = breadth;
    }

    this.area = function () {
        return width * height;
    };

    return constructor;
});

继承很简​​单:

var Square = new Class(function (uber) {
    return function (side) {
        uber(side, side);
    };
}, Rectangle);

您还可以使用基类方法,例如:

var Cube = new Class(function (uber) {
    var side;

    function constructor() {
        side = arguments[0];
        uber = uber(side);
    }

    this.area = function () {
        return 6 * uber.area();
    };

    this.volume = function () {
        return side * uber.area();
    };

    return constructor;
}, Square);

每个类都有自己的原型(prototype)对象。因此,原型(prototype)或类本身的任何属性(静态属性)都会被每个派生类自动继承。在调用 uber 函数之前,类内部定义的属性不会被继承。 uber 函数返回基类的实例,以便可以调用基类方法。

编辑:这是一个working example上述模式:

var cube = new Cube(5);
alert("Side of the cube: 5");
alert("Area of the cube: " + cube.area());     // 150
alert("Volume of the cube: " + cube.volume()); // 125

关于javascript - 关于 prototype 和 prototypejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11623929/

相关文章:

javascript - 如何从 Firebase 检索数据?

java - 使用变量作为对象名调用对象方法

javascript - 使用映射或任何其他方法转换数组 - javascript

javascript - 如何使用原型(prototype) js 库中止/取消请求?

javascript - Jquery通过内部元素的文本切换列表元素

javascript - jQuery 如何从字符串中删除多个空格

JavaScript - 如何访问对象数组中的特定值

javascript - 立即将 csv 文件中的数据显示到 handontable

javascript - 原型(prototype) - 在 HTMLInputElement 之后获取下一个文本输入

javascript - 原型(prototype)库中的浏览器和版本?