JS高级03
注意:
1.将不同的功能放到不同的js文件中
2.将不同的功能代码划分到不同的函数中
3.每个js中的代码都放到一个自调用函数中,防止变量的全局污染
①在自调用函数内部通过window.Food = Food这种形式,将内部的变量暴露到全局环境中
4.每个js文件都是通过面向对象的方式组织代码的
构造函数+原型
5.方法 放到原型中, 属性 放到构造函数中
原型对象constructor属性
原型对象的默认属性
原型对象.constructor----->构造函数
实例对象.constructor----->构造函数(属性搜索原则)
实力对象.__proto---------->原型对象
构造函数.prototype------->原型对象
方法
.hasOwnPeototype()
//判断属性是不是提供检测的对象提供的
语法:var ret = obj.hasOwnPrototype("name");
//返回值 布尔值
//如果是当前对象提供的返回true,若不是返回false
//注意: for in 在遍历对象时,内置对象不会被遍历出来,只有自己手动添加的属性和方法才会被遍历出来,包括原型对象的属性和方法
instanceof
判断构造函数的原型对象是否在被检测的对象的原型链上,返回值boolean;
function Person() {
}
var p = new Person();
// p原型链 Person.prototype-->Object.prototype--->null
// person的原型对象 Person.prototyp
// 判断person的原型对象是否在p的原型链上
var ret = p instanceof Person
console.log(ret);
面向对象特征介绍
继承
//混入式继承:
var dog1 = {name:"哈士奇",age:1,weight:"5kg"}
Object.prototype.say = function () {
console.log(haha);
}
var pipigou = {};
pipigou.extend = function (obj) {
for (var k in obj){
this[k] = obj[k]
}
}
pipigou.extend(dog1)
//注意:混入式继承会将被继承对象的原型对象中添加的属性继承过来
// 可通过.hasOwnPrototype()进项筛选
//原型继承
//原型继承:如果想要让一个对象继承自另一个对象中的属性和方法,
//只需要将这些属性和方法添加到原型对象中,那么这个实例对象就可以直接使用这些属性和方法,这就是原型继承
//原型继承利用了js自身的一个特点,实例对象可以直接使用原型对象中的属性和方法(属性搜索原则)
//1.利用对象的动态性(对象创建好之后,可以在任何时候给对象添加属性和方法)
function Person() {}
Person.prototype.say = function() {
console.log('hello world');
};
Person.prototype.coding = function() {
console.log('敲代码');
};
var p = new Person();
var p1 = new Person();
p.say();
p.coding();
p1.say();
p1.coding();
//利用覆盖原型对象
function Person() {};
Person.prototype = {
//覆盖了原来的原型对象,若要与原来的原型对象结构保持一致,
//需手动添加constructor:Person
say:function() {
console.log('hello world');
},
coding : function() {
console.log('敲代码');
}
}
3.利用混入式继承给原型对象添加属性和方法
//给原型对象添加extend方法,通过extend方法给原型对象添加属性和方法
// 利用 混入式继承
function Person() { }
// 给 原型对象 添加一个extend方法, 通过extend方法来给原型对象添加属性或方法
Person.prototype.extend = function (obj) {
for(var k in obj) {
this[k] = obj[k];
}
};
// 调用方式: 通过原型对象来调用extend放, 此时的作用才是 给原型对象 添加属性或方法
Person.prototype.extend( {
name: '小明',
age: 19
} );
var p = new Person();
// p.extend();
console.log(p.age);
var p1 = new Person();
console.log(p1.name);
Object.creat(参数对象)继承
// Object.create() 方法的基本使用介绍:
// 语法: var newObj = Object.create( 参数对象 )
// 作用: 创建一个新对象, 新对象 继承 参数对象
// 新对象.__proto__ === 参数对象
//参数对象为新对象的原型
函数的三种创建方式
1.函数的声明
注意:
函数声明只能出现在全局中或函数内部
不能出现在if这样的语句中
function fn(){}
声明的函数会进行提升
2.函数表达式
注意:
函数表达式也是有名字的,这种名字只能在函数内部使用
var fn = function( ) { }
函数表达式在预解析时不会进行提升
3.new Function
从这种创建方式可以看书函数也是对象
var fn = new Function()
1.所有的参数都是字符串类型
2.最后一个参数表示函数体
eg: var max = new Function("num1","num2","num1>num2?num1:num2;");
max(10,2)