gpt4 book ai didi

google-closure-compiler - Closure Compiler Externs - 警告 - 从未定义过的属性

转载 作者:行者123 更新时间:2023-12-03 18:01:02 27 4
gpt4 key购买 nike

我正在为 PIXI.js 库准备 externs。我收到以下警告:

js/Test.js:188: WARNING - Property position never defined on PIXI.Sprite
button.position.y = y;

以下是相关的外部定义:

//更新
/** 
* @constructor
* @extends {PIXI.Container}
* @param {PIXI.Texture} texture
*/
PIXI.Sprite = function(texture){};

/**
* @constructor
* @extends {PIXI.DisplayObject}
*/
PIXI.Container = function(){};

/**
* @constructor
* @extends {PIXI.EventEmitter}
*/
PIXI.DisplayObject = function(){};

/**
* @type {PIXI.Point}
*/
PIXI.DisplayObject.position;

仍然收到相同的警告。

我究竟做错了什么?

当我更换 PIXI.DisplayObject.position;PIXI.DisplayObject.prototype.position;这似乎清除了警告。

这是否意味着我应该总是定义 SomeObject.prototype.prop而不是 SomeObject.prop ?

最佳答案

这突出了静态和原型(prototype)属性之间的区别。

鉴于:

/**
* @constructor
* @param {number=} opt_num
*/
function foo(opt_num) {
if (opt_num !== undefined) {
this.bar = opt_num;
}
}
foo.prototype.bar = 17;
foo.bar = 42;

我们有同名的静态属性和原型(prototype)属性。但是它们的引用方式不同:
console.log((new foo()).bar); // 17
console.log((new foo(0)).bar); // 0
console.log(foo.bar); // 42

因此,在 extern 中,当您在类型上定义属性时 - 您通常希望在原型(prototype)对象上定义它们:
/** @param {foo} obj_foo */
function log(obj_foo) {
// This is an instance of "foo".
// The "bar" property references prototype or instance
// properties - not static properties.
console.log(obj_foo.bar);

// Static properties can only be referenced by the full namespace
console.log(foo.bar);
}

关于google-closure-compiler - Closure Compiler Externs - 警告 - 从未定义过的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34163475/

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