var obj = new obejct();
var obj= {};
function star(name ,age){ this.name = name; this.age = age; this.sing=function(){ console.log("唱歌"); } }
var gg = new star('张国荣',18);
gg.sing();
在内存中创建了一个空对象;让this指向这个新对象;执行构造函数里面的代码,给这个新的对象添加属性和方法;返回这个新对象(所以构造函数中不需要return);
实例成员:通过this添加的成员,只能通过实例化的对象访问;如上述代码中的star对象中的name,age,sing成员;
静态成员:在构造函数上直接添加的属性,只能通过构造函数访问;如star.sex=“男”;通过gg这个实例化的对象是访问不了的;
1、浪费内存;(每个实例化的对象中的函数都会开辟一个新的内存空间;)解决方法:protptype(原型对象)
构造函数通过原型分配的函数是所有对象共享的;javascript规定每个构造函数中都会有一个prototype属性,指向另一个对象,这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造 函数所拥有;(我们可以把不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法);
一般情况下,公共的属性定义在构造函数中,但公共的方法定义在构造函数的原型中;
star.prototype.sing=function(){
console.log("我会唱歌");
}
var gg = new star('张国荣',18);
var ldh =new star('刘德华',18);
gg.sing();
ldh.sing();
对象都会有一个属性__proto__指向构造函数的protype原型对象,之所以我们在对象中可以使用构造函数prototype原型对象的属性和方法,就是因为有__proto__原型的存在;
如对本文有疑问, 点击进行留言回复!!
轻松解决 org.apache.taglibs.standard.tlv.JstlCoreTLV 困惑
vert实践五——Json?Protocol Buffer?FlatBuffers?
[基于tensorflow的人脸检测] 基于神经网络的人脸检测8——验证训练好的神经网络
selenium + ajax抓取英雄联盟全部英雄的详细信息及多线程保存全部皮肤图片到本地
网友评论