微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery还是JavaScript有类和对象的概念?

我发现以下代码在某处,但我不能正确理解代码
ArticleVote.submitVote('no');return false;

ArticleVote一个类,并且submitVote()是该类的一个函数

或上述代码是什么意思?在jQuery还是传统的JavaScript中有类和对象的概念吗?如何创建它们?请分享一些参考链接代码

解决方法

一切都是JavaScript中的一个对象

与其他据称纯OOP语言相反。函数也是对象,但它们也可以是对象的构造函数

var ObjectCreator = function () {
};

以上是一个函数,如果适当调用,则创建一个对象。称为适当意味着您必须使用新的运算符:

var obj = new ObjectCreator;

所以尽管JavaScript本身没有类,但是它具有模拟这种行为的手段。例如:

class Foo {
    public void bar() {}
}

Foo foo = new Foo();

相当于以下JS代码

var Foo = function () {
    // constructor
};

Foo.prototype.bar = function () {}

var foo = new Foo;

继承是不同的

当你想使用继承(它是一种不同类型的继承(prototypal))时,真正的区别就在于它。所以,假设两个伪类Foo和Bar,如果我们想要Bar从Foo扩展,我们必须写:

var Foo = function () {};
var Bar = function () {};

Bar.prototype = new Foo; // this is the inheritance phase

var bar = new Bar;

alert(bar instanceof Foo);

对象文字

虽然构造函数是有用的,但有时我们只需要该对象的一个​​实例。编写一个构造函数,然后使用属性方法填充它的原型是一件乏味的事情。所以JavaScript有对象文字,这是一些哈希表,只是他们自我意识。通过自我意识,我的意思是他们知道这个关键字。对象文字是实现Singleton模式的好方法

var john = {
    age : 24,isAdult : function () {
        return this.age > 17;
    }
};

以上,使用构造函数将等效于以下内容

var Person = function (age) {
    this.age = age;
};

Person.prototype.isAdult = function () {
    return this.age > 17;
};

var john = new Person(24);

那个原型怎么样

正如很多人所说,在JavaScript对象中继承自对象。这个东西有用的方面,其中一个可能被称为寄生遗传(如果我正确地记得道格拉斯·克罗克福德提到的上下文)。无论如何,这个原型概念与原型链的概念相关,它类似于父母 – >儿童连锁经典OO语言。所以,继承的东西。如果在foo对象上调用一个bar方法,但该对象没有bar方法,则会启动成员查找阶段:

var Baz = function () {};

Baz.prototype.bar = function () {
    alert(1);
};

var Foo = function () {};
Foo.prototype = new Baz;

var foo = new Foo;

/*
 * Does foo.bar exist?
 *      - yes. Then execute it
 *      - no
 *          Does the prototype object of the constructor function have a bar
 *          property?
 *              - yes. Then execute it
 *              - no
 *                  Is there a constructor function for the prototype object of
 *                  the initial construct function? (in our case this is Baz)
 *                      - yes. Then it must have a prototype. Lookup a bar
 *                        member in that prototype object.
 *                      - no. OK,we're giving up. Throw an error.
 */
foo.bar();

坚持下去,你说过关于寄生遗传的一些事情

经典的OO继承与基于原型的继承有一个关键的区别。当对象从对象继承时,它们也继承状态。举个例子:

var Person = function (smart) {
    this.smart = smart;
};

var Adult = function (age) {
    this.age = age;
};

Adult.prototype = new Person(true);

var john = new Adult(24);

alert(john.smart);

我们可以说约翰是一个匿名人的寄生虫,因为它无情吸引了人的智慧。另外,考虑到上述定义,未来所有成年人都将是聪明的,不幸的是并不总是如此。但这并不意味着对象继承是一件坏事。只是一个工具,像其他任何东西。我们必须使用它,因为我们认为合适。

在经典的OO继承中,我们不能做到上述。我们可以使用静态字段来模拟它。但是这将使该类的所有实例具有与该字段相同的值。

原文地址:https://www.jb51.cc/jquery/182802.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐