
对象的原型(__proto__)->Star原型对象;
Star原型对象的原型(__proto__)->Object原型对象;
Object原型对象的原型(__proto__)->null;
按照“原型链”查找;
先看对象上是否有该成员;如果对象成员没有,则去Star原型对象上查找;Star原型对象没有,去Object原型(null)上查找......,没有则返回undefined;
如果对象上有,原型对象上也有,则返回对象上的成员(就近原则);
原型对象中this的指向:谁调用原型对象中的函数,this就指向谁(实例对象);
- <script type="text/javascript">
- //原型对象的应用,扩展内置对象方法
- console.log(Array.prototype);
- Array.prototype.sum = function(){
- var sum = 0;
- for(var i=0;i<this.length;i++)
- {
- sum += this[i];
- }
- return sum;
- }
- //var arr = [1,2,3];
- var arr1 = new Array(1,2,3);
- console.log(arr.sum());//根据原型链进行查找
- console.log(Array.prototype);
- </script>
运行结果:

数组和字符串内置对象不能给原型对象覆盖操作Array.prototype={},只能是Array.prototype.xx=function(){}方式。
调用这个函数,并且修改函数运行时的this指向。
fun.call(thisArg,arg1,arg2,...)
- <script type="text/javascript">
- var o ={
- name:'fang'
- }
- function fn(x,y){
- console.log("this is call demo");
- console.log(this);//this本来是指向window(window.fn())
- console.log(x+y);
- }
- fn.call();//1、可以调用fn函数;
- fn.call(o,2,3);//2、改变this指向,指向o这个对象
- </script>
运行结果:

通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性。
- <script type="text/javascript">
- function Father(uname,age){
- //this指向父类构造函数的对象实例
- this.uname = uname;
- this.age =age;
- }
- function Son(uname,age){
- //this指向子类构造函数的对象实例
- Father.call(this,uname,age);
- }
- var son1 = new Son('liming',25);
- console.log(son1);
- </script>
运行结果:

- <script type="text/javascript">
- function Father(uname,age){
- //this指向父类构造函数的对象实例
- this.uname = uname;
- this.age =age;
- }
- Father.prototype.money = function()
- {
- console.log("make money");
- }
- function Son(uname,age){
- //this指向子类构造函数的对象实例
- Father.call(this,uname,age);
- }
- Son.prototype = new Father();//将子类的原型执行父类的实例对象
- Son.prototype.constructor = Son;
- Son.prototype.exam = function(){
- console.log("exam :100");
- }
- var son1 = new Son('liming',25);
- console.log(son1);
- console.log(Father.prototype);
- </script>
运行结果:

array.forEach(function(currentValue,index,arr))
- <script type="text/javascript">
- var arr =[1,2,3];
- var sum =0;
- arr.forEach(function(value,index,array){
- sum+=value;
- });
- console.log("sum:"+sum);
- </script>
array.filter(function(currentValue,index,arr))
- <script type="text/javascript">
- var arr =[61,12,83];
- var newArr = arr.filter(function(value,index,array){
- return value >= 20;
- });
- console.log("newArr:"+newArr);
- </script>
运行结果:
![]()
- var arr =['red','green','blue'];
- arr.some(function(value,index,array){
- if(value == 'green'){
- console.log("find ");
- return true;//在some里遇到return就会终止遍历,迭代效率更高。
- }
- console.log("value:"+value);
- });
trim()方法会从一个字符串的两端删除空白字符
str.trim()
- <script type="text/javascript">
- var str = ' liming ';
- console.log('str:'+str);
- var newStr = str.trim();
- console.log("newStr:"+newStr);
- </script>
Object.defineProperty()定义对象中新属性或修改原有属性。
Object.defineProperty(obj,prop,descriptor)
descriptor定义:以对象形式{}书写
- <script type="text/javascript">
- var obj ={
- id:1,
- name:'huawei',
- price:1000
- };
- Object.defineProperty(obj,'id',{
- value:2,
- writable:false,
- });
- Object.defineProperty(obj,'address',{
- value:'shandong china',
- enumrable:false,
- configurable:false,//address不允许被删除
- });
- console.log(Object.keys(obj));//找不到address
- delete obj.address;
- console.log(obj);//address不允许被删除
- delete obj.name;
- console.log(obj);//name允许被删除
- </script>
运行结果:
