JS基础学习-function与原型
Function对象
语法规则
var 函数名 = new Function()
var fn = new Function(‘a,b’,’return a+b;’);
实际开发中不建议使用
定义函数的方式
函数声明方式
function 函数名(形参){函数体
返回值
}
字面量方式
var 函数名=function(形参){
函数体
返回值
}
构造函数方式
var 函数名 = new Function()
原型
原型属性
用于保存对象的共享属性和方法原型的属性和方法并不影响函数本身的属性和方法
所有的函数都是Functionl类型的对象
所有Function类型的对象都具有prototype原型属性
所有prototype原型属性的默认值都是一个空对象
所有的空对象都可以添加属性和方法
构造函数
同样也具有参数–形参和实参
在方法中使用属性的话–this .属性名
this
注意
this的用法本身就是JavaScript中的一大难点
含义
本身不具备任何含义(根据使用环境)
代表将来要创建的对象
利用原型扩展属性和方法.js
/*
构造函数
* 同样也具有参数 -> 形参和实参
* 在方法中使用属性的话 -> this.属性名
* this
* 注意 – this的用法本身就是JavaScript中的一大难点
* 含义 – 本身不具备任何含义(使用环境)
* this -> 代表将来要创建的对象
*/
function Hero(name){
this.name = name;
this.sayMe = function(){
console.log(this.name);
}
}
/*var hero = new Hero(‘张无忌’);
console.log(hero.name);
hero.sayMe();*/
console.log(Hero.prototype);
// 将构造函数的prototype属性赋值给一个变量 -> 就是一个空对象
var obj = Hero.prototype;
// 为对象添加属性和方法
obj.age = 18;
obj.job = ‘教主’;
obj.sayAge = function(){
console.log(‘this is age’);
}
var hero = new Hero(‘张无忌’);
console.log(hero);
console.log(hero.job);
hero.sayAge();
!!原型的属性或方法与构造函数的属性和方法同名时,构造函数的属性和方法的优先级别更高
__proto__:是Object的属性
Prototype:是function的属性
原型链
function A() {}
var obj1=A.prototype;
obj1.a= ‘a’;
var a=new A();
console.log(a.a);//a
console.log(a.b);//undefined
function B(){
this .b=’b’;
}
B.prototype =a;
var b =new B();
console.log(b.b);//b
console.log(b.a);//a
如果构造函数或对象 A ,A 的原型指向构造函数或对象 B,B 的原型再指向构造函数或对象 C,以此类推,最终的构造函数或对象的原型指向 Object 的原型。由此形成一条链状结构,被称之为原型链。
隐式原型
var obj1 = {
name : ‘zhangwuji’
}
console.log(obj1.__proto__);
var obj2 = new Object();
console.log(obj2.__proto__);
var obj3 = Object.create(obj2);
console.log(obj3.__proto__);