原型定义: 原型是function对象的一个属性,他定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。 原型也是对象。
下面用一个原型的例子展示一下:
/*
所有new 出来的Person对象都有它的属性
相当于Person对象 继承自prototype的属性和方法
*/
Person.prototype = {
LastName = "zhang",
name = "ming",
say = function () {
console.log("hehe");
}
}
function Person(name) {
this.LastName = name; // 会覆盖该对象继承自原型的东西
}
var p = new Person("aa");
/*
如果执行
p.name = "sss"; 不会修改原型的值 而是会在p对象内加一个name 属性
修改原型属性的正确姿势:
Person.prototype.name = "mingming";
不能通过delete删除对象原型属性 来删除 原型属性
delete p.prototype.name 不会动原型的
delete Person.prototype.name 这样会动原型的
*/
修改原型指向的对象:
// 一个个的原型串起来构成原型链
function Person() {
/*
var this = {
__proto__ : Perosn.prototype
}
*/
}
var obj = {};
var p = new Person();
p.__proto__ = obj; // 改遍原型
// 实例 依据原型链查找
Person.prototype = {
name : "a",
sayName : function () {
console.log(this.name);
}
}
function Perosn () {
this.name = "b";
}
var person = new Person();
person.sayName(this.name); // 输出b this指的是 person
person.prototype.sayName(this.name); // 输出a this指的是person.prototype
通过Object.creat()方法创建对象
var obj = {
name : "zhang"
};
var obj1 = Object.creat(null); // 创建一个没有prototype的对象
var obj1 = Object.creat(obj); // 创建一个prototype是obj的对象
重写方法
Number.prototype.toString = function () {
return "hehe";
}
var num = 123;
num.toString();
// 输出 hehe
取整方法
Math.ceil(123.333); // 124 向上取整
Math.floor(123.999); // 123 向下取整
call方法的使用
function Person (name, age) {
this.name = name;
this.age = age;
};
var obj = {
};
Person.call(obj, "zhang", 19);
====>>call生成
function Person (name, age) {
obj.name = "zhang";
obj.age = 19;
};
/// 下面一个call 实例
function Person (name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
function Student (name, age, sex, tel, grade) {
Person.call(this, name, age, sex);
this.tel = tel;
this.grade = grade;
}
var stu = new Student("ming", 19, male, 110, 100);
开发中call 常用的场景
// call的使用
// 轮子生产车间
function Wheel(wheelSize, style) {
this.wheelSize = wheelSize;
this.style = style;
}
// 样式设计车间
function Sit(sitColor) {
this.sitColor = sitColor;
}
// 框架生产车间
function Model(height, width, len) {
this.height = height;
this.width = width;
this.len = len;
}
// 汽车组装车间
function Car(wheelSize, style, sitColor, height, width, len) {
Wheel.call(this, wheelSize, style);
Sit.call(this, sitColor);
Model.call(this, height, width, len);
}
var car = new Car(100, "花里胡哨", "red", 1000, 1500, 5000);
与call 稍微不同的是
call需要把实参按照形参的方式传
apply 需要传一个arguments 即如下
function Person(name, age) {
this.name = name;
this.age = age;
}
var obj1 = {};
var person = Person.apply(obj1, ["zhang", 19]);