gpt4 book ai didi

javascript - Backbone 类属性? 'this.property' 在它的方法中不起作用?

转载 作者:行者123 更新时间:2023-11-30 07:56:58 24 4
gpt4 key购买 nike

需要 Backbone 的帮助:

var Vehicles = Backbone.Model.extend({}, {
name: 'Sabre',
summary: function() {
console.log(this.name +" is a dog!");
}
});

Vehicles.summary();

这会打印出:“是一只狗”

两个问题:

  1. 为什么它不打印出名字?为什么 this.name 不起作用?

  2. 在下一行中,firstBlocksecondblock 有什么区别?

    Backbone.Model.extend({firstBlock},{SecondBlock});

最佳答案

如果您在 summary 静态方法中查看 this:

summary: function() {
console.log(this);
}

你会看到这样的东西:

function (){return r.apply(this,arguments)}

所以 this 确实是您期望的构造函数。这意味着 this 不是问题所在。

当你说 M = Backbone.Model.extend(...) 时,你会在 M 中得到一个构造函数。但是,JavaScript 函数具有不可写的 name properties :

Function.name

The function.name property returns the name of the function.

所以问题是您试图将 name 用作静态属性,但该属性名称已被占用,您无法覆盖它。

如果您使用不同的属性名称:

var Vehicles = Backbone.Model.extend({}, {
pancakes: 'Sabre',
summary: function() {
console.log(this.pancakes + " is a dog!");
}
});

然后事情会按预期运行,因为函数(通常)没有不可写的 pancakes 属性。

演示:https://jsfiddle.net/ambiguous/qk78edkp/

就您的第一个问题而言,它确实有效,但 Backbone.Model.extend 为您提供的构造函数没有名称。

Pimmol's answer很好地涵盖了第二个问题,所以我将不理会它。

关于javascript - Backbone 类属性? 'this.property' 在它的方法中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37607551/

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