②如果函数作为普通的函数调用时,prototype没有任何作用
③当函数以构造函数形式调用时,它所创建的对象中都会有隐含的属性,指向该构造函数的原型对象,我们可以用__proto__来访问该属性。
④原型对象就相当于公共的区域,所有同一个类的实例都可以到这个原型对象,我们可以将对象中共有的内容统一设置到原型对象中
⑤当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有没有则会去原型对象中寻找,如果找到则直接使用,直到找Object,Object的原型没有原型,如果最后没有找到,则返回undefind
①当我们直接在页面中打印一个对象时,实际是输出对象的toString()方法的返回值,可以自行更改toString()方法的返回值,
function People(name){
this.name=name
//对象方法
this.Introduce=function(){
alert("My name is "+this.name)
}
}
//类方法
People.Run=function(){
alert("I can run")
}
//原型方法
People.prototype.IntroduceChinese=function(){
alert("我的名字是"+this.name)
}
//测试
var p1=new People("Windking")
p1.Introduce()
People.Run()
p1.IntroduceChinese()
1、对象方法理解就很简单了,主要是如果类生成一个实例,那么该实例就能使用该方法
2、类方法,不需要通过生成实例就可以使用的方法
3、原型方法主要是用来对JS已有的系统对象进行扩展而生的,例如Array数组没有什么方法,你可以为其增加原型方法,那么创建的数组就拥有了该方法。
1、对象方法包括构造函数中的方法以及构造函数原型上面的方法;
2、类方法,其实这里的类就是一个函数,在js中由于函数也是一个对象,所以可以为函数添加属性以及方法,这种方法在node中用的比较多;
3、原型方法一般用于对象实例共享,比如Person.prototype.sayName=function(){console.log(this.name)}在原型上面添加该方法,就能实现共享。这样就不用每一次初始化一个实例的时候,为其分配相应的内存了。
顶
0
踩
这段代码很简单,你应该是不明白两个运行结果不一样的原因,我只说明运行结果不同的原因。首先你要明白this关键字是与运行时环境有关,和声明时环境无关。
new test(1).fun2()这个fun2调用fun1时这句alert(tihs.m_num)这个this的运行环境是fun2,所以它代表fun2,只会弹出undefined,
new test(1).fun3()由于fun3的指针是指向fun1的,而fun1是test的一个属性,这句alert(tihs.m_num)这个this的运行环境是test,所以它代表test,只会弹出5。