V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  FrankFang128  ›  全部回复第 230 页 / 共 278 页
回复总数  5541
1 ... 226  227  228  229  230  231  232  233  234  235 ... 278  
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的原型的一个问题
不太明白你的疑问在哪里。
你明明声明了为什么觉得自己没声明?
2014-01-23 22:08:36 +08:00
回复了 Tankpt 创建的主题 问与答 关于js的原型的一个问题
fTest.prototype.name = "hello";
这不是 name 的声明吗?
2014-01-23 16:42:17 +08:00
回复了 mikej 创建的主题 Node.js NodeJS关于同步式I/O和异步式I/O的一点疑问?
最好永远不要在node里调用耗时的同步方法。
2014-01-23 13:01:07 +08:00
回复了 zhangsimon 创建的主题 问与答 笔试题目后不给反馈很正常吗?
你所说的反馈是指录用不录用吧。
不回你就是不录用了。
2014-01-23 13:00:14 +08:00
回复了 zhangsimon 创建的主题 问与答 笔试题目后不给反馈很正常吗?
你没笔试过别人吗。一般不会给每道打分,也无法打分,只有一个印象,所以不怎么好反馈。
2014-01-23 02:04:56 +08:00
回复了 jiangrongyong 创建的主题 JavaScript gulpjs
不是新闻了。
grunt的优势是周grunt-*插件很多,这个呢,也许可以试试。
2014-01-22 22:20:31 +08:00
回复了 miniwade514 创建的主题 分享发现 今天出现好多次 “ 锟斤拷 ”
你知不知道「烫烫烫烫烫烫」和「屯屯屯屯屯屯」?
2014-01-22 22:14:27 +08:00
回复了 allengaller 创建的主题 Node.js [node-webkit]如何调用GCC编译的C语言程序
为什么要用 C,JS 可以的。
你是客户端程序呀,又不是 server。
信息过载
1 ... 226  227  228  229  230  231  232  233  234  235 ... 278  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1870 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 60ms · UTC 00:29 · PVG 08:29 · LAX 16:29 · JFK 19:29
Developed with CodeLauncher
♥ Do have faith in what you're doing.