关于原型链
来源:15-13 原型和原型链-代码演示
max25225
2017-07-04
老师,最近我发现了一个问题~~~
function Foo(){
this.getage = function(){
console.log(20)
}
}
var f = new Foo()
console.log(f.__proto__)
Foo.prototype.getname = function(){
console.log('green')
}在这里.我突发奇想,如果说原型顾名思义,作为一个标准去创建一个对象,那么这个原型有什么属性或方法,同样,这个对象就有什么属性或方法.但是...我在这个构造函数中创建了一个方法函数,这个方法函数,只要通过这个Foo 去new了一个新的对象,那么,这个新的对象也会有这个getage()方法.也就是说,即使不同过在prototype属性来增加属性,在构造方法中同样能达到一模一样的效果?是这样的对吗?第二个疑惑就是如果方式都是一样的,那么我在构造函数中写了一个方法,那么相对的,原型是不是也应该有这个属性呢,但是我测试了下,发现没有..请老师帮助解答一下~~~
写回答
2回答
-
首先,不管构造函数还是prototype都是为了节省空间,又能重复使用。所以,要先假定一个东西有用之后再去想为什么,要不然就会想偏。
就好比:你想通过ID得到一个元素,如果没有构造函数,你每次都必须document.。。。就一大串代码,但是如果写一个公用的方法,就不用这么麻烦。
然后,如果在这个构造函数中,你又定义了一些对所取得元素的某些处理方法,那么,下次用到,也就不用单独定义了。
但是,又不是每次用到这个构造函数,里面的所有对于元素的处理方法都会用到,所以,定义的时候就将处理方法最好都写在prototype中。因为当你new一个对象的时候,并不会得到prototype中的方法,但是会有_proto_指向prototype,这样,你想用还是可以用,但是又节约空间
112017-07-04 -
双越
2017-07-04
你给出的代码,第8行应该放在第6行前面,才能生效
00
相似问题