华龙建设部网站查不到,大型网站权限设计,动态wordpress动态主题,外贸平台有哪些知乎学到原型的时候感觉头都大了/(ㄒoㄒ)/~~ 尤其是ptototype和__proto__ 傻傻分不清 通过多番查找资料#xff0c;根据自己的理解#xff0c;总结如下#xff1a;
一、构造函数#xff1a;
构造函数#xff1a;通过new关键字可以用来创建特定类型的对象的函数。比如像Obje…学到原型的时候感觉头都大了/(ㄒoㄒ)/~~ 尤其是ptototype和__proto__ 傻傻分不清 通过多番查找资料根据自己的理解总结如下
一、构造函数
构造函数通过new关键字可以用来创建特定类型的对象的函数。比如像Object和Array两者属于内置的原生的构造函数在运行时会自动的出现在执行环境中可以直接使用。如下 var arr new Array();//使用Array构造函数创建了一个array实例arr
arr[0]a;
arr[1]b;
alert(arr);//a,bvar objnew Object();//使用Object构造函数创建了一个Object实例obj
obj.namec;
obj.age12;
alert(obj.name);//c 我们可以自定义的创建构造函数并为其自定义属性和方法如 //创建构造函数Person
function Person(name,age){this.namename;this.ageage;this.sayNamefunction(){alert(this.name)//};
}//使用new关键字来生成Person实例
var person1new Person(Tom,22);
var person2new Person(Jerry,21);
person1.sayName();//Tom
person2.sayName();//Jerry 注意以下几点
构造函数的名字始终要以大写字母开头主要是为了区别于非构造函数也即是区别于普通函数构造函数也就是函数定义构造函数和定义普通函数的语法一样。构造函数和普通函数的区别在于使用他们的方式不同。任何函数只要使用new操作符来调用那他就可以作为构造函数不使用new操作符来调用就是普通函数 function Person(name,age){this.namename;this.ageage;this.sayNamefunction(){alert(this.name)//};
}//当做构造函数使用
var personnew Person(Tom,22);
person.sayName();//Tom
//当做普通函数使用
Person(Jerry,30);//添加到window
sayName();//Jerry 等同于window.sayName(); 二、原型对象
每个函数都有一个prototype属性它是一个指向原型对象的指针原型对象在定义函数时同时被创建原型对象的用途是包含所有实例共享的属性和方法 function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.nameTom;
Person.prototype.age25;
Person.prototype.sayNamefunction(){alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1new Person();
var person2new Person();
person1.sayName();//Tom
person2.sayName();//Tom 只要创建了一个新函数每个函数在创建之后都会获得一个prototype的属性这个属性指向函数的原型对象原型对象在定义函数时同时被创建此原型对象又有一个名为“constructor”的属性反过来指向函数本身达到一种循环指向
如在上边的例子中alert(Person.prototype.constructorPerson);//会返回true function Person(){}
alert(Person.prototype.constructorPerson);//true 三、__proto__(注意这里proto左右两边都有两个_)
当调用构造函数创建一个新实例后该实例的内部将包含一个指针[[Prototype]]该指针指向创建它的构造函数的原型在脚本上没有标准的方法来访问[[Prototype]]但大多数浏览器都支持通过__proto__来访问。 function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.nameTom;
Person.prototype.age25;
Person.prototype.sayNamefunction(){alert(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1new Person();
var person2new Person();
person1.sayName();//Tom
person2.sayName();//Tom
alert(person1.__proto__Person.prototype);//true 以上述的示例代码为例各个对象之间的关系如下图所示 总结
①只要创建了一个函数该函数的原型对象也随之同时被创建出来原型对象中的属性和方法被经由其相对应的构造函数所创建的实例所共享
②每个函数在创建之后都会获得一个prototype的属性这个属性指向该函数的原型对象
③每个实例对象的__proto__属性都指向其构造函数的原型 更多专业前端知识请上
【猿2048】www.mk2048.com