var something = {
wtf: null,
omg: null
};
Run Code Online (Sandbox Code Playgroud)
自从我上次编程以来,我的JavaScript知识仍然非常不完整,但我想我现在已经重新学习了大部分知识.除此之外.我记不起以前见过这个.它是什么?我在哪里可以了解更多相关信息?
为什么这段代码有效......
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
greet: function() {
console.log(this.texts.text1 + ' ' + this.texts.text2 + '!');
}
}
message.greet();
Run Code Online (Sandbox Code Playgroud)
......但这不是吗?
var message = {
texts: {
text1: 'Hello',
text2: 'World'
},
both: this.texts.text1 + ' ' + this.texts.text2 + '!',
greet: function() {
console.log(this.both);
}
}
message.greet();
Run Code Online (Sandbox Code Playgroud)
它给了我"两个都没有定义"的错误.我在这里错过了什么?出了点问题this.both?对于对象文字,我总是新手
我正在使用object literal来创建一个带有方法的对象.
这是一个简单的例子.
var SizeManager = {
width : 800,
height : 600,
ratio : this.width / this.height,
resize : function (newWidth) {
width = newWidth;
height = newWidth / ratio;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是SizeManager.ratio返回" NaN ".我很确定这是一个初始化问题.
有没有办法获得正确的比率值?
有没有办法为对象文字分配一个costructor或初始化器?
是定义构造函数objcet的唯一方法吗?
编辑:当然,SizeManager理想情况下是一个单例(只有一个对象),这就是我使用对象文字的方式.
是否可以从对象文字中递归调用一个方法?
例如:
(function () {
'use strict';
var abc = ['A', 'B', 'C'],
obj = {
f: function () {
if (abc.length) {
abc.shift();
f(); // Recursive call
}
}
};
obj.f();
}());
Run Code Online (Sandbox Code Playgroud)
错误:在定义之前使用'f'.
谢谢.
在尝试评估以下内容时,我在chrome和firefox开发人员工具中遇到错误:
{
"a": "",
"b": ""
}
Run Code Online (Sandbox Code Playgroud)
jsonlint.com告诉我这是有效的.将此代码放在实际的javascript文件中并运行它可以正常工作.只有当我在Chrome开发人员工具或firebug中在控制台中运行时,才会出现这种奇怪现象.这里发生了什么?
我正在阅读TypeScript文档的这一部分,在“通用类型”部分下,以下两个声明是等效的:
代码样本1
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: <T>(arg: T) => T = identity;
Run Code Online (Sandbox Code Playgroud)
代码样本2
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: {<T>(arg: T): T} = identity;
Run Code Online (Sandbox Code Playgroud)
文档指出,由于以下原因,这是可能的。
我们还可以将泛型写为对象文字类型的调用签名
尽管有这句话,我仍在努力理解两者的等效性,是否有进一步的文档或说明“对象文字类型的调用签名”的含义。
对不起,我无法给出进一步的解释,但是我对两者的等效性完全是空白,对我来说第二种类型定义指出myIdentity应该是一个对象?
谢谢。
在以下代码中,是否可以从嵌套对象文字中访问x成员?
var outer = {
x : 0,
inner: {
a : x + 1, // 'x' is undefined.
b : outer.x + 1, // 'outer' is undefined.
c : this.x + 1 // This doesn't produce an error,
} // but outer.inner.c is NaN.
}
Run Code Online (Sandbox Code Playgroud) 码:
var animals = {
"elephant": {
"name" : "Bingo",
"age" : "4"
},
"Lion": {
"name" : "Tango",
"age" : "8"
},
"Tiger": {
"name" : "Zango",
"age" : "7"
}
}
Run Code Online (Sandbox Code Playgroud)
我想在此对象文字中使用Jquery计算对象的数量.
我发现'this'关键字似乎始终指向global在嵌套对象文字中使用箭头函数.
根据其他问题,下面的代码片段可以解释为箭头函数的'this'在词汇上下文中定义.
var c = 100;
var a = {c:5 , fn: () => {return this.c;} };
console.log(a.c); //100
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解以下代码(嵌套对象文字):
var c = 100;
var a = {
c: 5,
b: {
c: 10,
fn: ()=> {return this.c;}
}
}
console.log(a.b.fn());// still 100, why not 5?
Run Code Online (Sandbox Code Playgroud)
我的意思是,如果从词汇语境方面考虑,不应该在abfn中的'this'指向一个?
为什么,无论对象嵌套多少级别,所有'this'实例都指向窗口还是全局?
this在对象文字中的函数内部使用时的预期行为是什么?
例如,假设我有一个类型foo,它只有一个名为的函数bar而没有其他属性。但是在该fooObj.bar方法中,我可以访问this.baz(其中baz不是 type 的属性foo)我看不到任何错误。不应该打字稿错误,因为fooObj它没有baz吗?
type foo = {
bar(): void;
}
var fooObj: foo = {
bar: () => {
// TS does not error out when I access this.baz
console.log(this.baz);
}
}
Run Code Online (Sandbox Code Playgroud) javascript ×10
object-literal ×10
object ×2
this ×2
typescript ×2
constructor ×1
ecmascript-6 ×1
generics ×1
jquery ×1
jquery-ui ×1
json ×1
nested ×1
recursion ×1
scope ×1
syntax-error ×1