如果我有一个返回对不可见(私有或受保护)属性的引用的公共类方法,我可以使用该引用来获得直接访问:
PHP代码
class A
{
private $property = 'orange';
public function &ExposeProperty()
{
return $this->property;
}
public function Output()
{
echo $this->property;
}
}
$obj = new A();
# prints 'orange'
$obj->Output();
$var = &$obj->ExposeProperty();
$var = 'apple';
# prints 'apple'
$obj->Output();
Run Code Online (Sandbox Code Playgroud)
PHP 中的此功能背后是否有原因?还是只是设计上的疏忽,未能通过引用跟踪访问冲突?
当您想要实现以下目标时,它显然会派上用场:
PHP代码
$this->load->resource();
Run Code Online (Sandbox Code Playgroud)
哪里load是修改给定属性的对象$this。但是除了这个快捷方式,我没有看到很多可能的用途,否则有效的 OOP 模式是不可能的。
我有一个实例化器函数,它返回所提供类的一个实例:
declare type ClassType = { new (): any }; // alias "ParameterlessConstructor"
function getInstance(constructor: ClassType): any {
return new constructor();
}
Run Code Online (Sandbox Code Playgroud)
我怎么可能让这个函数返回一个实例中的 constructor 参数,而不是any,让我可以实现类型安全,为消费者这个功能呢?
我希望使用以下自动步骤构建我的TypeScript项目(在Visual Studio中):
.ts文件分别编译为AMD模块.js文件与webpack 捆绑在一起release/my-app.js作为步骤1的一部分,.d.ts还为每个.ts文件创建文件(除了输出Javascript文件).我如何将这些定义文件捆绑在一起,以便它们为捆绑到my-app.js输出文件中的内容提供类型定义?
项目布局
MyApp
|-- lib
| |-- foo.ts
| |-- foo.js
| |-- foo.d.ts
| `-- ...
|-- release
| `-- my-app.js
|-- main.ts
|-- main.js
|-- main.d.ts
`-- webpack.config.js
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
module.exports = {
context: __dirname,
entry: './main.js',
output: {
path: path.join(__dirname, 'release'),
filename: 'my-app.js'
}
}
Run Code Online (Sandbox Code Playgroud) 我在TypeScript中有一个属性装饰器,只能在类型的属性上使用Array.要强制执行此操作,TypeError如果属性类型不是,则在运行时抛出a Array(使用反射元数据获取属性类型信息):
function ArrayLog(target: any, propertyKey: string) {
if (Reflect.getMetadata("design:type", target, propertyKey) !== Array) {
throw new TypeError();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是,我不会认为这太开心了.我怎么能这样做,以便TypeScript编译器只允许在某种类型的属性上使用某个属性装饰器?
我需要测试一个值是否是通用基类的实例,而又不知道通用类型参数。使用MSDN示例作为示例的基础,这是我要完成的任务:
using System;
public class Class1<T> { }
public class DerivedC1 : Class1<int> { }
class IsSubclassTest
{
public static void Main()
{
Console.WriteLine(
"DerivedC1 subclass of Class1: {0}",
typeof(DerivedC1).IsSubclassOf(typeof(Class1<>)) // <- Here.
);
}
}
Run Code Online (Sandbox Code Playgroud)
尽管从语法上讲这是正确的,但始终会产生错误。如果删除通用类型参数,它将按预期工作(返回true)。
如何在不知道类通用类型参数的情况下,测试类类型是否是通用基类的子类?
在编写反应代码时在 jsx 中编写 if-else 不起作用。
<div id={if (condition) { 'msg' }}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)
但是使用三元运算符有效。
<div id={condition ? 'msg' : null}>Hello World!</div>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我有一组统一的对象:
var objects = [{
id: 1,
name: "one"
}, {
id: 2,
name: "two"
}];
Run Code Online (Sandbox Code Playgroud)
我通过使用id每个对象的属性作为 Map 键将它们转换为 Map:
var map = new Map();
objects.forEach(obj => map.set(obj.id, obj));
Run Code Online (Sandbox Code Playgroud)
但是,我想在没有以下情况下进行转换:
set自己此外,我不觉得我应该为这个可能是原生的功能创建一个实用程序函数。
注意:搜索js array to map,或js convert array to map,或js map from array 的搜索查询都被石器时代的答案 with
Object或具有实用功能的解决方案所困扰。我找了这里原生的做法。
例如,我正在寻找在 C# 中将数组映射到字典的本机 JavaScript 等效项。
var map = list.ToDictionary(item => item.id);
Run Code Online (Sandbox Code Playgroud)
这非常简单和方便,但有趣的是Map.from,JavaScript 中没有(即使有Array.from)。
我需要在 Javascript 中实现从选定区域获取元素。这是在 chrome 应用程序中制作更好的、类似桌面的 UI 所必需的。最近的例子是在 Imgur 扩展中选择区域:
所以问题是:
我在我的单元测试中使用以下小实用程序来比较一些对象:
static class ObjectAssert
{
public static void AreSimilar(object expected, object actual, string message)
{
var serializer = new JavaScriptSerializer();
if (serializer.Serialize(expected) != serializer.Serialize(actual))
{
throw new AssertFailedException(message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,它是所有序列化expected和actual成JSON,然后比较所得到的字符串,这使得它容易比较对象的公共可见部分.我这样使用它:
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
public void UnitTest1()
{
var expected = new Person() { FirstName = "John", LastName = "Doe" };
var actual = new Person() { FirstName = "John", …Run Code Online (Sandbox Code Playgroud) 我想在文件中使用SVG use元素.tsx:
<mask id="mask1">
<use ... />
</mask>
Run Code Online (Sandbox Code Playgroud)
我将其直接转换为React调用。但是,我一直收到以下错误:
类型“ JSX.IntrinsicElements”上不存在属性“ use”。
Visual Studio 2015社区版
我相信标准的lib定义中缺少此元素。如何声明此类型以供TypeScript编译器查看,类似于如何声明类或变量?通常declare var和declare class语句均无效。
如果不可能,如何使TypeScript编译器忽略此错误?
javascript ×4
typescript ×4
c# ×2
jsx ×2
decorator ×1
ecmascript-6 ×1
html5-canvas ×1
imgur ×1
oop ×1
php ×1
react-jsx ×1
reactjs ×1
reflection ×1
webpack ×1