我想知道console.log在打印对象时从哪里获取构造函数的名称.此外,这实际上是否会影响代码?
function F() {
this.test = 'ok';
}
var f = new F();
console.log( f );
Run Code Online (Sandbox Code Playgroud)
console.log(在Chrome中)的输出为:F {test:"ok"}
在什么地方的console.log得到F的F {test...?
如果我改变F.constructor,F.prototype以及f.constructor随机的东西,它仍然打印原始F:
function G() {
this.fail = 'bad';
}
function F() {
this.test = 'ok';
}
F.prototype = G;
F.constructor = G;
var f = new F();
console.log( f );
Run Code Online (Sandbox Code Playgroud)
输出仍然相同 - F {test: "ok"}
这些信息是由浏览器私下保存的,我的问题是它是否以任何方式影响JavaScript代码?也就是说,在我覆盖构造函数prototype和constructor属性之后,它会在比较或继承期间爬行吗?
UPDATE
最初的目的是做到以下几点.
function Person ( _name ) {
this.name …Run Code Online (Sandbox Code Playgroud) 我对这个发现有点磕磕绊绊,无法向我自己解释这背后的原因.
附带的小提琴显示两个DIV,一个嵌套在另一个.外部DIV具有设定的高度和宽度以及相对位置.内部DIV还具有设定的高度和宽度.除此之外,它的顶部,右侧和底部填充设置为100%.\
据我所知,填充将根据父级的高度和宽度得出.但是,结果显示所有填充(顶部,右侧和底部)仅引用父级的宽度.似乎所有浏览器都呈现相同的结果.因此,它必须是某种标准的一部分.
我的问题是为什么以这种方式实现这一点以及是否有一种方法可以引用父级的高度而不是父级的顶部和底部填充的宽度.
我来自使用Android MediaCodec从相机编码H.264的线程。我的设置非常相似。但是,我尝试使用javacv编写编码帧的多路复用,并通过rtmp广播它们。
RtmpClient.java
...
private volatile BlockingQueue<byte[]> mFrameQueue = new LinkedBlockingQueue<byte[]>(MAXIMUM_VIDEO_FRAME_BACKLOG);
...
private void startStream() throws FrameRecorder.Exception, IOException {
if (TextUtils.isEmpty(mDestination)) {
throw new IllegalStateException("Cannot start RtmpClient without destination");
}
if (mCamera == null) {
throw new IllegalStateException("Cannot start RtmpClient without camera.");
}
Camera.Parameters cameraParams = mCamera.getParameters();
mRecorder = new FFmpegFrameRecorder(
mDestination,
mVideoQuality.resX,
mVideoQuality.resY,
(mAudioQuality.channelType.equals(AudioQuality.CHANNEL_TYPE_STEREO) ? 2 : 1));
mRecorder.setFormat("flv");
mRecorder.setFrameRate(mVideoQuality.frameRate);
mRecorder.setVideoBitrate(mVideoQuality.bitRate);
mRecorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
mRecorder.setSampleRate(mAudioQuality.samplingRate);
mRecorder.setAudioBitrate(mAudioQuality.bitRate);
mRecorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
mVideoStream = new VideoStream(mRecorder, mVideoQuality, mFrameQueue, mCamera);
mAudioStream = new AudioStream(mRecorder, mAudioQuality); …Run Code Online (Sandbox Code Playgroud) 我正在探索vue.js,并对如何解决某个问题提出疑问.
我的根组件有以下模板:
<div class="container">
<div class="stage">
<map :current-time="currentTime" :recording="recording"></map>
<player :track="track" :current-time="currentTime"></player>
</div>
<control-panel :current-time="currentTime"></control-panel>
</div>
Run Code Online (Sandbox Code Playgroud)
基本上,<player>组件<video>内部的元素将加载指定的轨道(隐藏本机控件).因此,它实际上将在视频播放时(当前时间,播放状态等)驱动应用程序的状态.但是,<control-panel>有一个擦洗条和按钮,用于指示视频状态(播放/暂停,搜索).显然,在其中一个组件中更改此一般状态将影响其他两个组件(映射也将根据当前时间进行).
但是,我想知道它是否更有意义,以及Vue是否支持提供对组件的引用,以便我可以提供<control-panel>引用,<player>以便它可以直接从它进行状态更改.
或者这应该以一种全球状态传递给儿童还是以事件广播的方式完成?在我纠正之前,考虑一个例子,其中有两个<player>s和两个<control-panel>s不是分层相关的,但是一个panelA与playerA和panelB与playerB一起工作.在这种情况下,我认为广播选项从桌面上掉下来,对吗?
我欢迎任何建议,因为我只是学习Vue.
因此,在对Vue稍微熟悉并从社区回复之后,我想我已经想出了一个聪明的同步<player>和<control-panel>一起解决方案.我的标记更改为以下内容:
<div class="container">
<div class="stage">
<map :current-time="currentTime" :recording="recording"></map>
<player :track="track" :current-time="currentTime" v-ref:player></player>
</div>
<control-panel :current-time="currentTime" v-ref:player-controls :player="$refs.player"></control-panel>
</div>
Run Code Online (Sandbox Code Playgroud)
注意在添加v-ref属性<player>和<control-panel>以及:player="$refs.player"属性在后者.这允许我将逻辑关联在一起.在我看来,控制面板知道它控制的是谁或者是什么是有意义的.我将进一步测试它,但是,现在,这似乎工作.
至于捆绑在一起<map>,我将最终使用广播或简单的双向currentTime更新<control-panel>.我将在我去的时候更新这篇文章,如果与任何答案不同,将标记正确答案或发布我自己的答案.
请阅读下面的答案.我已经能够使用下面的方法成功解决我的问题.
我正在使用socket.io库向socket.io服务器发送消息.服务器需要JSON对象,数组等.我的原始实现使用JSONOject和JSONArray数据类型.但是,我想切换到使用Parceler库生成的类.使用库的注释生成的类可以包装到Parcel中.这似乎是管理此类通信的一种非常方便的方式.但是,有没有办法将Parceler的类或Parcel类转换为JSON字符串或JSONObject/Array?
GSON库支持toJson方法,我知道Retrofit对Parcels,JSON和GSON有些神奇.
我的PostgreSQL数据库包含一个用于存储已注册实体实例的表.此表格通过电子表格上传填充.Web界面允许操作员修改所呈现的信息.但是,原始数据不会被修改.所有的改变都存储在一个单独的表changes与列unique_id,column_name,value和updated_at.
更改完成后,首先查询原始表,然后查询更改表(使用实例ID和最新更改日期,按列名称分组),将其呈现给操作员.这两个结果在PHP中合并,并在Web界面上显示.这是执行任务的一种相当严格的方式,我想将所有逻辑保留在SQL中.
我可以使用以下查询轻松选择表的最新更改:
SELECT fltr_chg.unique_id, fltr_chg.column_name, chg_val.value
FROM changes AS chg_val
JOIN (
SELECT chg_rec.unique_id, chg_rec.column_name, MAX( chg_rec.updated_at )
FROM information_schema.columns AS source
JOIN changes AS chg_rec ON source.table_name = 'instances'
AND source.column_name = chg_rec.column_name
GROUP BY chg_rec.unique_id, chg_rec.column_name
) AS fltr_chg ON fltr_chg.unique_id = chg_val.unique_id
AND fltr_chg.column_name = chg_val.column_name;
Run Code Online (Sandbox Code Playgroud)
从instances表中选择条目同样简单:
SELECT * FROM instances;
Run Code Online (Sandbox Code Playgroud)
现在,如果只有一种方法可以转换前一个结果并将结果值替换为后者,基于unique_id和column_name,并且仍将结果保留为表格,则问题将得到解决.这可能吗?
我确信这不是最罕见的问题,而且很有可能,某些系统会以类似的方式跟踪数据的变化.如果不是通过上述方法之一(当前和寻求的解决方案),他们如何将它们应用于数据?
我正在使用标头构建首选项活动.在文档中,我看到extra可以为每个header条目指定参数.在代码中,我想在设置活动中构建标题列表时访问这些额外的值,如下所示.请注意,我是从重载onBuildHeaders而不是标题片段的活动中完成的.
if (header.extras != null && header.extras.containsKey("someKey")) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是,extras参数始终为null.有没有办法强制它被读入?
android ×3
javascript ×2
class ×1
console.log ×1
crosstab ×1
css ×1
dynamic-sql ×1
ffmpeg ×1
gson ×1
h.264 ×1
html ×1
javacv ×1
json ×1
mvvm ×1
new-operator ×1
padding ×1
parcelable ×1
parceler ×1
php ×1
plpgsql ×1
postgresql ×1
styling ×1
vue.js ×1
xml ×1