创建具有相同属性和方法的对象
1.构造函数
构造函数首字母大写,在构造函数内给this添加我想要的属性即可
function Person(name){ this.name=name; this.sayName=function(){ console.log(this.name); }; }
//在构造函数内给this添加我需要的属性即可
//这个版本的Person构造函数接受一个命名参数name,并将其赋值给this对象的name属性。同时,构造函数还给对象添加了一个sayName()方法
当你调用构造函数时,new会自动创建this对象,且其类型就是构造函数的类型
构造函数创建好之后使用new来进行对象的实例化
1 var person1=new Person("yyqx"); 2 var person2=new Person("syx"); 3 console.log(person1.name); 4 person2.sayName();
2.原型对象
一次性为所有对象定义方法的理想手段
将方法放在原型对象中并用this访问当前实例是更有效的做法。
1 function People(name){ 2 this.name=name; 3 } 4 People.prototype={ 5 constructor:People,//使用对象字面量创建的对象改变了构造函数的属性,因此默认指向OBJECT,必须显式的指定指向People 6 7 sayName:function(){ 8 console.log(this.name); 9 }, 10 toString:function(){ 11 return "[People:"+this.name+"]"; 12 } 13 }; 14 var people1=new People("gtt"); 15 var people2=new People("lyw"); 16 people1.sayName(); 17 console.log(people1.toString());
//另一种给构造函数添加原型对象的方法
People.prototype.sayHi=function(){
console.log(“Hi”+this.name);
}
//给原型对象添加新成员,都可以立即被已经存在的对象实例引用
2.1 判断一个属性是不是原型对象
function hasPrototypeProperty(object,name){ return name in object &&!object.hasOwnProperty(name); }
//这个函数接受两个参数:一个是对象名A,一个参数属性名B。用来判断属性B是不是对象A的原型属性
如果某个属性in一个对象,但hasOwnProperty()返回false,那么这个属性就是一个原型属性
2.2 prototype属性和原型对象链
prototype 只包含一个指向原型对象的指针,
任何对原型对象的改变都立即反映到所有引用它的对象上
当读取一个对象的属性时,JavaScript引擎首先在该对象的自有属性中查找属性名字。如果找到则返回。
如果自有属性中不包含该名字,则JavaScript会搜索[[Prototype]]中的对象。如果找到则返回。
如果找不到,则返回undefined。
沿着原型链查找对象属性,原型链接上最后一个是Object.prototype,值为null
2.3
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/279337.html