修改方法中的类属性

问题描述 投票:0回答:1

我正在研究OOP以及jQuery之类的框架是如何工作的。如果我使用改变类属性的方法创建类,它会为所有变量调用更改它:

class test{

        constructor(selector) {
            this.el = document.querySelectorAll(selector);
            return this;
        }

        find(selector) {
            this.el = this.el[0].querySelectorAll(selector); //well...
            return this;
        }

}

function x(selector){ return new test(selector); }

var p = x('#parent'); //returns #parent
var c = p.find('#child') //returns #child
console.log(p); //returns #child too!

但是如果我使用jQuery它就像我需要的那样:

var p = $('#parent'); //returns #parent
var c = p.find('#child') //returns #child
console.log(p); //returns #parent

我理解“find”方法替换类的属性,变量“p”就像类实例的快捷方式。但是如何让它像jQuery一样工作呢?

javascript jquery oop inner-classes
1个回答
1
投票

jQuery的作用方式是它不会像以前那样给你相同的元素,而是一个新元素。如果我们对您的代码使用相同的技术,它看起来会像这样:

class test{

        constructor(selector) {
            this.el = document.querySelectorAll(selector);
            return this;
        }

        find(selector) {
            return new test(selector); //return a new instance
        }

}

function x(selector){ return new test(selector); }

var p = x('#parent'); //will return #parent
var c = p.find('#child') //will return #child - this is a separate instance
console.log(p); //will still return #parent because it's not modified by .find()

这个例子可能有点过分,但一般的想法仍然存在 - 如果你不想改变它,不要修改主对象的状态。如果你确实需要对新状态采取行动但仍然保留旧状态,那么只有两个对象就更容易了。

© www.soinside.com 2019 - 2024. All rights reserved.