通过构造函数生成的实例化对象,无法共享属性或方法(即每个实例化对象上都有构造函数中的属性和方法):造成了一定的资源浪费 function Obj(name,age){ this.name=name; this.age=age; this.func=function(){ return 'this is a test function'; }; } var o1=new Obj('小明',10); var o2=new Obj('小白',12); console.log(o1.func===o2.…
网上有一道美团外卖的面试题是这样的: Function.prototype.a = 'a'; Object.prototype.b = 'b'; function Person(){}; var p = new Person(); console.log('p.a: '+ p.a); // p.a: undefined console.log('p.b: '+ p.b); // p.b: b 问为什么? 有不少同学第一眼看上去就觉得很疑惑,p不是应该继承了Function原型里面的属性吗,为什么…
构造器:可以被 new 运算符调用, Boolean,Number,String,Date,RegExp,Error,Function,Array,Object 都是构造器,他们有各自的实现方式. 比如:var s=new String("test") s的 [[Prototype]] 内部属性设定为标准内置的字符串原型对象,它是 String.prototype 的初始值.s的 [[Class]] 内部属性设定为 "String".s的 [[Extensible]…
什么是原型对象? 请看下面的代码,我们以各种姿势,创建了几个方法! function fn1() { } var fn2 = function () { } var fn3 = new Function() console.log(typeof fn1) //function console.log(typeof fn2) //function console.log(typeof fn3) //function console.dir(fn1) //如下图 console.dir(fn2)//…
1.所有函数都有一个特别的属性 prototype : 显式原型属性 [普通构造函数的实例对象没有prototype 属性,构造函数有__proto__属性,原型对象有__proto__属性 ] 2.函数的prototype属性(图) 每个函数都有一个prototype属性, 它默认指向一个Object空对象(即称为: 原型对象) [即Object实例对象 {}] 原型对象中有一个属性constructor, 它指向函数对象 [相互引用] 3.给原型对象添加属性(一般都是方法) 作用: 函数的所…
“我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法.” 引用类型才具有prototype属性,包含: 1.Object 2.Function 3.Array 4.Date 5.String 6.RegExp 比如: var fn=new String("text"); String.prototype.value="val"; console.log(fn.v…
我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototype就是通过调用构造函数而创建的那个对象实例的原型对象.使用原受对象的优点是能够让全部对象实例共享它所包括的属性和方法.换句话说,不必在构造函数中定义对象实例的信息,而是能够将这些信息直接加入到原型对象中,如以下的样例所看到的. function Person(){} Person.prototyp…
一.__proto__ 对象内部存在一个指针,用来指向上一层函数的原型对象.ECMA-262第五版中关这个指针叫[[prototype]],但Firefox.Safari和Chrome在每个对象上都支持一个属性__proto__,这也就是网上说的'每个对象都有一个__proto__属性'的原因. 二.prototype prototype为函数对象的一个属性.无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性.且属性指向该函数的原型对象. 三.原型对…
(欢迎一起探讨,如果有什么地方写的不准确或是不正确也欢迎大家指出来~) PS: 内容中的__proto__可能会被markdown语法导致显示为proto. 建议将构造函数中的方法都定义到构造函数的原型中,由该构造函数创建的实例的方法都会指向同一个方法.(在内部声明的话,每创建一个实例都会重新实例化函数,每个实例中的函数的指向是不同的:如果定义在全局中,且有很多方法,这样毫无封装性可言.) 一.属性和方法 构造函数可以定义三种属性和方法: 对象属性/对象方法:在构造函数中定义的属性或方法 静态属…
1>首先,我们先将函数对象认识清楚: 补充snow的另一种写法: var snow =function(){}; 2>其次:就是原型对象 每当我们定义一个函数对象的时候,这个对象中就会包含一些内置的属性,其中有一个属性叫prototype(原型对象) 原型对象不是谁都有的,是函数对象特有的 ,普通对象没有.但是普通对象有一个__proto__属性(叫原型) 所有对象都有__proto__属性(原型). 总结:函数对象有原型对象(prototype)属性和原型对象中的原型(__proto__)属…