gpt4 book ai didi

javascript - knockout 原型(prototype)问题

转载 作者:行者123 更新时间:2023-11-28 13:09:28 25 4
gpt4 key购买 nike

我想了解为什么当属性是原型(prototype)时, knockout 的行为会有所不同,尤其重要的是,如何在仍然使用原型(prototype)的情况下避免 knockout 。
我希望重写一些方法,因为我有一个我们要继承的基本 View 模型

下面说明了我的意思

JSFIDDLE WITH PROTOTYPE [try typing into the first input box and it will appear in the other]

var viewModel = function(params) {
this.params = params;
};
viewModel.prototype.text = ko.observable(this.params && this.params.initialText || '');


ko.components.register('message-editor', {
viewModel: viewModel,
template: 'Message: <input data-bind="value: text" /> '
+ '(length: <span data-bind="text: text().length"></span>)'
});

ko.applyBindings();
<!-- ko component: "message-editor" -->
<!-- /ko -->
<br />
<!-- ko component: "message-editor" -->
<!-- /ko -->


<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

JSFIDDLE WITHOUT PROTOTYPE [try typing into the first input box and it will not appear in the other]

var viewModel = function(params) {
this.params = params;
this.text = ko.observable(this.params && this.params.initialText || '');
};


ko.components.register('message-editor', {
viewModel: viewModel,
template: 'Message: <input data-bind="value: text" /> '
+ '(length: <span data-bind="text: text().length"></span>)'
});

ko.applyBindings();
<!-- ko component: "message-editor" -->
<!-- /ko -->
<br />
<!-- ko component: "message-editor" -->
<!-- /ko -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

为什么他们的行为不同?

最佳答案

在 JavaScript 中,原型(prototype)仅用于该类型的每个对象所共有的函数。所有实例都可以共享该函数的相同副本,因为该函数在调用时通过 this 获取对实例对象的引用。 Knockout 可观察量并非设计为存储在原型(prototype)中,因为它们存储特定于对象实例的数据。

关于javascript - knockout 原型(prototype)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43930205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com