小编Rom*_*zur的帖子

JavaScript对象和基元类型有什么区别?

Stoyan Stefanov在他的优秀书"面向对象的JavaScript"中说:

任何不属于上面列出的五种基本类型之一的值都是一个对象.

有五个基本类型,他的意思Number,String,Boolean,UndefinedNull.但是在Google Chrome控制台中,数字似乎根本不是原始类型(与C原始类型相比int).看起来原始数字有方法:

var a = 2.2;
console.log(a.toFixed()); // logs "2"
Run Code Online (Sandbox Code Playgroud)

因此我假设我可以使用数字作为对象,所以我尝试为它分配一个属性:

var a = 2;
a.foo = 'bar';
console.log(a.foo); // logs undefined
Run Code Online (Sandbox Code Playgroud)

我不明白那种行为.如果number有一个方法,它应该表现得像对象,不应该吗?它甚至有一个原型:

Number.prototype.foo = 'bar';
var a = 2;
console.log(a.foo); // logs 'bar'
Run Code Online (Sandbox Code Playgroud)

那么这背后的魔力是什么?JavaScript如何处理对象与原始类型?我宁愿不使用单词primitive,用简单的对象代替它.我认为那些是无法用新属性扩展的对象,但它们是通过构造函数构造的,并且还具有可以像普通对象一样扩展的原型.

javascript

10
推荐指数
1
解决办法
2143
查看次数

如何在我的数据库中实现Twitter转发操作

我正在实现类似于Twitter的Web应用程序.我需要实施"转发"动作,一条推文可以多次转发一个人.

我有一个基本的'推文'表,其中包含以下列:

推文: tweet_id | tweet_text | tweet_date_created | tweet_user_id

(tweet_id推文的主键,tweet_text包含推文文本,tweet_date_created是创建推文时的DateTime,tweet_user_idusers表的外键,表示创建推文的用户)

现在我想知道如何在我的数据库中实现转推动作.

选项1

我应该创建新的连接表,如下所示:

锐推:tweet_id | user_id | retweet_date_retweeted

(表tweet_id的外键在哪里,是tweetsuser_id的外键,users并标识转发了推文的用户,retweet_date_retweeted是指定转发何时完成的DateTime.)

优点:没有空列,当用户进行reteet时,retweets将创建表中的新行.

缺点:查询过程将更加困难,它需要连接两个表,并以某种方式按两个日期排序推文(当推文不转发时,通过tweet_date_created对其进行排序,当推文转推时,通过retweet_date_retweeted对其进行排序).

选项2

或者我应该在tweets表中实现它parent_id,它将如下所示:

推文: tweet_id | tweet_text | tweet_date_created | tweet_user_id | PARENT_ID

(其中所有列保持不变并且parent_id是同一个tweets表的外键.当创建推文时,parent_id保持为空.当转发推文时,parent_id包含原始推文id,tweet_user_id包含处理转推动作的用户,tweet_date_created包含转发时的DateTime完成,并tweet_text保持空白 …

database database-design relational-database

6
推荐指数
1
解决办法
2117
查看次数

MVC4 Ajax表单:如何显示服务器端验证

我正在使用@Ajax.BeginForm帮助方法,它通过Ajax将表单数据提交给服务器.当数据到达服务器时,将处理某些服务器端验证,并将最终结果传递回浏览器.

我的问题是,我希望在没有页面刷新的情况下显示错误.基于此我发现了很多问题,但它们已经过时了.我想知道是否有一些新方法如何实现这一目标.到目前为止,我发现的最好的方法是使用jQuery处理结果.但也许在新的MVC4中有一些内置的功能如何以更好的方式实现这个问题?

asp.net asp.net-mvc-4

5
推荐指数
1
解决办法
4601
查看次数

强制jQuery仅搜索指定元素的子树

有可能以某种方式重新配置jQuery只搜索指定元素的子树吗?

我需要做这样的事情:

var lockToSubtree = function (jq) {
        //reconfigure jq
        return reconfiguredJQuery;
    },

    myJQuery = lockToSubtree(jQuery, '.my-namespace');
Run Code Online (Sandbox Code Playgroud)

所以我有自己的jQuery实例,只在'.my-namespace'中搜索元素.

为了说明我的需求,这里有一个示例HTML:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
    <div id="divOne" class="someClass"></div>
    <div class="my-namespace">
        <div id="divTwo" class="someClass"></div>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我以后可以在我的代码中使用:

var $el = myJQuery('.someClass');
Run Code Online (Sandbox Code Playgroud)

它只搜索.someClassa的子树.my-namespace.因此,它只会返回div#divTwodiv#divOne将被跳过,因为它不是一个子树下设.my-namespace.

关键是,我需要它.my-namespace在使用jQuery类似函数.closest()等时继续搜索子树,请参阅最终的代码片段:

var $myJQuery = lockToSubtree(jQuery, '.my-namespace'),
    $el = myJQuery('.someClass'); // $el is the #divTwo element

$el.closest('body'); // finds nothing, …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

4
推荐指数
1
解决办法
1752
查看次数

TypeScript和类似JS的单例模式

我需要在TypeScript中实现Singleton模式.我在这里找到了一个解决方案,但对我来说这似乎有些过分.毕竟,JavaScript非常适合创建单例.

是否可以在TypeScript中编写这样的东西(没有收到错误)?

module Helpers {
    Helpers.Singleton = {};
}
Run Code Online (Sandbox Code Playgroud)

目前,它正确生成我期望的输出:

// Module
var Helpers;
(function (Helpers) {
    Helpers.Singleton = {};
})(Helpers || (Helpers = {}));
Run Code Online (Sandbox Code Playgroud)

但是为什么我的VisualStudio中的TypeScript编译器会抱怨它(它在第2行说它"找不到符号'助手'."?是否有可能以另一种方式编写它?

左侧显示生成的代码,右侧显示VisualStudio的错误突出显示

javascript typescript

2
推荐指数
1
解决办法
2834
查看次数