V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  FrankFang128  ›  全部回复第 229 页 / 共 277 页
回复总数  5529
1 ... 225  226  227  228  229  230  231  232  233  234 ... 277  
2014-01-24 01:39:05 +08:00
回复了 GreenBamboo 创建的主题 问与答 假如技术面试能过的话,高中学历能不能进TAB?
腾讯是不会的。除非你的成就足够高,能直接引起马化腾的重视。
2014-01-24 00:06:48 +08:00
回复了 icedx 创建的主题 问与答 求推荐RSS阅读服务 Feedly 和Ino累感不爱
digg reader 还行吧
2014-01-24 00:05:59 +08:00
回复了 zorceta 创建的主题 分享发现 移动WLAN的程序员真是天才
禁用 JS 嘛
2014-01-24 00:02:38 +08:00
回复了 Tankpt 创建的主题 问与答 新手关于前端的一点提问
都『很有』
2014-01-24 00:02:26 +08:00
回复了 Tankpt 创建的主题 问与答 新手关于前端的一点提问
我发现你问的问题都还有代表性啊。不错。
2014-01-23 23:59:32 +08:00
回复了 Tankpt 创建的主题 Backbone.js 渣渣想请教下有关backbone的一点入门理解问题
MVC 对于 JS 来说,是舶来品,同时是必需品。
先说为什么是舶来品。因为 MVC 前几年和 JS 一点关系也没有。MVC 常用在后台程序里,PHP 的 MVC 框架多了去了。我就大概的介绍下,我写后台也没写多久。
一般来说 MVC 都有一个 R(Router,即路由),不懂这个概念没关系,先来看看程序员怎么用 Router。
假设我们用 PHP 实现一个 MVC 的 Todo 网站,那么一个熟悉 MVC 的后台开发人员首先要「设计 URL」
http://example.com/todo/list 这个页面用来展示 todo list
http://example.com/todo/add 用于添加 todo
暂且就要这两个URL吧。Router 的作用就是根据 url,找相应的代码来负责响应(Router 本身不负责响应)。

Router 的实现

if url is /todo/list
> then call somebody to show the list page
if url is /todo/add
> then call somebody to show the adding page
if url is /todo/remove

那么谁来当这个 somebody 呢?它就是 Todo 类,这个类有 list 和 add 两个方法。看上去很完美的样子。为什么 Router 不直接做出响应,非要 Todo 类响应呢?分工明确嘛。

这个 Todo 类,被命名为控制器C(为什么叫控制器?因为待会它要控制 Model 和 View)

Todo 的实现

function list
> get all the todo MODELs
> generate a VIEW with the MODELs
> RESPONSE the user with the VIEW

RESPONSE 就是向浏览器发送页面的意思,而 VIEW 差不多就是页面的意思,MODEL 呢?当然是数据。
数据可以是从数据库里得到的。这里你就看到 Controller 是如何在操纵 View 和 Model 了。

function add
> if METHOD == get
> > RESPONSE with the adding VIEW
> if METHOD == post
> > get todo name from the post params
> > generate a MODEL with the todo name
> > save the MODEL (to mysql)
> > RESPONSE with the success VIEW

add 方法首先判断 METHOD 是 get 还是 post。如果是 get(当你在浏览器里输入一个网址时,就是在 get 该网址),就展示添加页面,这个页面可能是一个表单,几个输入框,一个提交按钮。当用户点击提交时,就是 post 了一个请求。如果 METHOD 是 post,就新建一个 model,存到 mysql,然后向用户返回一个成功页面(success VIEW)

MVC 的流程基本就是这样了。
为什么是 MVC?因为通用。哪个网站没有 Model(数据),除非你是全静态网站;哪个网站没有 View(页面HTML)。而 Controller,是为了解藕,Model 现在只负责数据了,View 只负责页面 HTML,那么其他的脏活累活谁做?Controller。 Router 是来干什么的呢?活太多了,需要多个 Controller 来做,是不是需要一个监工/指挥/经理呢?比如现在这个 Todo 网站允许用户注册了,是不是需要一个 User 类来负责登录、注册呢?Router 就是给他们俩指派任务的人。

我理解的后台 MVC 就是这样了。
晚了,前端的 MVC 下次再讲。
2014-01-23 23:24:04 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
我理解到现在的程度,用了大半年的时间,还是觉得没理解透啊。嘿嘿
2014-01-23 23:17:16 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
你理懂还有段距离吧。 建议你看看李战的《悟透 JS》http://www.cnblogs.com/leadzen/archive/2008/02/25/1073404.html
是他的博客,后来编成书了。第一部分很不错,后面的就差一点。
2014-01-23 23:15:08 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
至于 this 指向哪里,也是不确定的,要看具体环境。
如果你直接运行一个方法,比如
function foo(){
console.log(this) // window
console.log(this === window) // true
}

如果你运行一个 object 的方法,不如

var obj = {
foo : function(){
console.log(this===obj)
}
}
obj.foo() // true

但是你可以使用 call 来指定 this,比如

var obj = {
foo : function(){
console.log(this===myObj)
}
}

var myObj = {}
obj.foo.call(myObj) // true

so...不知道你懂了没。
2014-01-23 23:10:29 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
而写的过程呢,就简单很多了。
this.name = 'hi'
JS 引擎会看 this 有没有 name 这个属性。没有就新建一个 name ,并赋值为1(没有查看__proto__ 的过程);有就直接赋值。
2014-01-23 23:08:37 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
读 name 的过程和写 name 的过程是不一样的。11楼说的是读的过程。
2014-01-23 23:07:15 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
this 和 prototype 就是 JS 最难理解的两个地方啊。
2014-01-23 23:04:56 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
这是因为 oTest1.setname 中的 this ,指的是 oTest1。所以 oTest1.setname 会在 oTest1(this)上添加 name 属性。



如果你运行 oTest1.setname.call(fTest.prototype,'another name'),那么期间的 this 就是 fTest.prototype 了。
这里涉及的概念是 context。 你可以试着运行下。
2014-01-23 23:01:30 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
this.name 指向哪里,是不确定的。
唯一确定的是 JS 引擎的查找规则。
在你 setname 之前,如果你想读取 oTest1 的 name,那么 JS 引擎首先看 oTest1 自身有么有 name 属性(没有),然后再看 __proto__ 里有没有(有),如果还找不到,它会继续看 __proto__ 的 __proto__。
但是你 setname 之后, oTest1 就有了「自己的」name 属性。你再让 JS 引擎找 oTest1.name 的时候,它依然用刚才的逻辑找 name。
现在应该懂了吧。
2014-01-23 22:56:12 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
已经很久没看面向对象的东西,不过不建议你从面向对象的角度去理解,而是从原型链的角度来理解。
2014-01-23 22:54:36 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
应该不能称为「类属性」。 暂时还没想到合适的词。
在你执行 oTest1.setname 时,在 oTest1 上添加了一个 name,同时 oTest1 的 __proto__ 里也有一个 name。
根据 JS 查找成员的规则,它如果在 oTest1 上找到了 name, 就不会再去看 oTest1 的 __proto__ 了。
而 oTest2,因为自身没有 name 属性,所以 JS 引擎会去看它的 __proto__
2014-01-23 22:50:22 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
但是对于没用覆盖过 name 的 oTest2 来说, name 还是 __proto__ 的 name,而不是 its own property。
2014-01-23 22:49:20 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
在 context 是 oTest1 的情况下,你只能操作 oTest1 的属性,无法通过 oTest1 改变它的 __proto__ 的属性,也就是说,你添加了一个实例属性,覆盖了『类』属性。
2014-01-23 22:15:37 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
console.log(oTest1)

> fTest {name: "hello", setname: function, getname: function}
> > __proto__: fTest
> > > constructor: function fTest(name){}
> > > getname: function (){
> > > name: "hello"
> > > setname: function (name){
> > > __proto__: Object

oTest1 和 oTest2 的 name 属性都是从 __proto__ 里得到的,而 __proto__ 指向 fTest.prototype,而 fTest.prototype.name = "hello";.
所以 oTest1 和 oTest2 的 name 属性来自同一个地方,但是 name 不是它们自身的属性
oTest1.hasOwnProperty('name')
false
2014-01-23 22:09:49 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
不太明白你的疑问在哪里。
你明明声明了为什么觉得自己没声明?
1 ... 225  226  227  228  229  230  231  232  233  234 ... 277  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5081 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 84ms · UTC 01:14 · PVG 09:14 · LAX 18:14 · JFK 21:14
Developed with CodeLauncher
♥ Do have faith in what you're doing.