var Gallery = Backbone.Controller.extend({
_index: null,
_photos: null,
_album :null,
_subalbums:null,
_subphotos:null,
_data:null,
_photosview:null,
_currentsub:null,
routes: {
"": "index",
"subalbum/:id": "subindex",
"subalbum/:id/" : "directphoto",
"subalbum/:id/:num" : "hashphoto"
},
initialize: function(options) {
var ws = this;
if (this._index === null){
$.ajax({
url: 'data/album1.json',
dataType: 'json',
data: {},
success: function(data) {
ws._data = data;
ws._photos =
new PhotoCollection(data);
ws._index =
new IndexView({model: ws._photos});
Backbone.history.loadUrl();
}
});
return this;
}
return this;
},
//Handle rendering the initial view for the
//application
index: function() …Run Code Online (Sandbox Code Playgroud) 说我有以下标记:
<my-comp myDirective></my-comp>
Run Code Online (Sandbox Code Playgroud)
有没有办法可以从指令访问组件实例?
更具体地说,我希望能够访问MyComponentfrom 的属性和方法MyDirective,理想情况下不向上面的HTML添加任何内容.
在许多具有简单OO功能(PHP 4)或误解OO功能(使用函数指针等的Javascript,C)的语言中,您最终会得到一个使用前导下划线来表示权限级别的函数命名约定.
//ex.
function _myPrivateFunction(){
}
Run Code Online (Sandbox Code Playgroud)
虽然各个团队总是会提出这样的命名惯例,但是下划线惯例看起来如此普遍,以至于让我很好奇
除了纯粹的好奇心之外,我在一些我正在处理的代码库中看到了这一点,并且我想了解最初提出它的开发人员可能的顶空.
我遇到了以下javascript代码:
this.removeEdge = function(source, target) {
if(!_states[source]) return;
var children = _states[source].children,
index = _(children).indexOf(target);
if(index !== -1) children.splice(index, 1);
};
Run Code Online (Sandbox Code Playgroud)
_(儿童)是什么意思?
我是一名优秀的JavaScript程序员,并且遵守道格拉斯·克罗克福德所征集的编码惯例.然而,JavaScript从那时起已经发展,我相信命名约定现在已经过时了.
例如Crockford说:
不要使用
_(下划线)作为名称的第一个字符.它有时用于表示隐私,但实际上并不提供隐私.如果隐私很重要,请使用提供私人会员的表格.避免表现出缺乏能力的惯例.
但是,JavaScript现在允许您创建不可枚举的属性.因此,有意义的是(至少对我来说 - 你被允许不同意)使用下划线为非可枚举属性添加前缀以指示该属性是不可枚举的.
你为什么要这样做?
for in循环中的下划线开头的属性.让我们再举一个Crockford所说的例子:
全局变量应该全部上限.(JavaScript没有宏或常量,因此使用全部大写来表示JavaScript没有的功能没有多大意义.)
正如我所看到的,以下约定存在两个问题:
一切都很好,但你问的真正问题是什么?看看这个Object.defineProperties功能.问题是您需要为要定义的每个属性提供属性描述符.这太冗长了.例如:
var o = {}, x = 0;
Object.defineProperties(o, {
E: {
value: Math.E,
enumerable: true,
configurable: true
}
x: {
enumerable: true,
configurable: true,
get: function () {
return x;
},
set: function (y) {
x = y;
}
}
});
Run Code Online (Sandbox Code Playgroud)
相反,如果您只是这样做会更好:
var o = {}, x = 0;
define(o, …Run Code Online (Sandbox Code Playgroud) 我正在使用一个闭包来创建一个私有和公共方法的对象.它看起来像这样 -
var Dog = (function() {
function Dog() {}
var size = 'big';
var _privateSaySize = function() {
return 'I am a ' + size + ' dog.';
}
Dog.prototype.publicSaySize = function() {
return _privateSaySize();
}
return Dog;
})();
Run Code Online (Sandbox Code Playgroud)
但是现在我希望有一个只有私有函数并且由另一个对象继承的对象.但这在JavaScript中是否可行?
我正在做一个redux教程,并且看到这样的呼叫:
this._render();
Run Code Online (Sandbox Code Playgroud)
在其他地方定义为:
_render() {
....
}
Run Code Online (Sandbox Code Playgroud)
下划线“ _”是什么?为什么使用它?
我正在使用VS2012,我的一个项目范围的Javascript函数名称空间的所有公开方法都以下划线开头_,例如:
var NameSpace = {
_aMethod = function () { },
_anotherMethod = function () { }
};
Run Code Online (Sandbox Code Playgroud)
我为命名空间创建了一个快速的vsdoc文件,并且命名空间本身出现了,但没有一个方法可以.注意:如果我_在方法的开头删除它,它就像一个魅力.
// This would work, and show up in the VSDOC
var NameSpace = {
aMethod = function () { },
anotherMethod = function () { }
// ^ notice no underscores
};
Run Code Online (Sandbox Code Playgroud)
有没有办法解决?
通过整个项目并重命名它们(即使使用find-all)也会有风险,因为这些方法与所有内容交织在一起.
javascript intellisense visual-studio-2010 visual-studio visual-studio-2012
来自jquery.ui.autocomplete.js:
_renderMenu: function( ul, items ) {
var self = this;
$.each( items, function( index, item ) {
self._renderItem( ul, item );
});
},
Run Code Online (Sandbox Code Playgroud) 我正在尝试修复一些使用函数和原型函数的Javascript.出于某种原因,当我尝试访问原型函数时,原型函数总是未定义的,我无法弄清楚原因.
这是我想要做的一个简单的例子.基本上,我想_open从原始Container函数声明中引用原型this.
Container();
function Container() {
alert(this._open);
}
Container.prototype._open = function() {
alert("hey");
}
Run Code Online (Sandbox Code Playgroud)
我在https://javascript.info/class看到了下面的代码
它的构造函数正在获取name参数并将其分配给this.name. 然后在名为 getter 的 getter 中name返回this._name。为什么即使构造函数不用于设置值,此代码也能工作?this._name
class User {
constructor(name) {
// invokes the setter
this.name = name;
}
get name() {
return this._name;
}
set name(value) {
if (value.length < 4) {
alert("Name is too short.");
return;
}
this._name = value;
}
}
let user = new User("John");
alert(user.name); // John
user = new User(""); // Name is too short.
Run Code Online (Sandbox Code Playgroud) javascript ×10
oop ×2
angular ×1
backbone.js ×1
coding-style ×1
history ×1
intellisense ×1
jquery ×1
php ×1
react-redux ×1
reactjs ×1