标签:正是 存在 设计图 自带 创建 otp ima 高级 子类
var o1 = {};
var o2 = new Object();
var o3 = new f1();
function f1(){};
var f2 = function(){};
var f3 = new Function(‘str‘);
typeof Object;//function
typeof Function;//function
typeof f1;//function
typeof f2;//function
typeof f3;//function
typeof o1;//object
typeof o2;//object
typeof o3;//object
在上面的例子中 o1 o2 o3 为普通对象,f1 f2 f3 为函数对象。怎么区分,其实很简单,凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。f1,f2,归根结底都是通过 new Function()的方式进行创建的。Function Object 也都是通过 New Function()创建的。
function Person(name, age, job){
this.name = name;
this.age = age;
this.sayName = function(){
alert(this.name);
}
}
var person1 = new Person(‘mike‘,15);
var person2 = new Person(‘nike‘,18);
上例中person1和person2为Person的实例,两个实例中都有隐含的
==constructor==属性(通过原型对象继承得到),该属性指向构造函数Person
function Person(name, age, job){
Person.prototpe.name = father;
Person.prototpe. = 28;
Person.prototpe.sayName = function(){
alert(this.name);
}
}
var person1 = new Person();
person1.sayName();//‘mike‘
var person2 = new Person();
person2.sayName();//‘nike‘
person1.sayName == person2.sayName;//true
person1.name = ‘joy‘;
person1.sayName();//‘joy‘
通过为构造函数Person的原型对象创建属性,person1,person2将继承Person.prototype的属性,如果实例定义了与原型对象同名属性,原型对象属性则会被覆盖。
function Person(){}
Person.prototype = {
name:‘‘,
age:‘‘,
sayName:function(){
}
}
==注意==:该方法的原型对象的constructor属性不再指向Person,此时例中指向Object(新new的一个对象),如若需要可在Person.pertotype的字面量中添加:==constructor:Person,==
JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象。
函数对象的__proto__全部都是指向Function的prototype。
对象 person1 有一个 __proto__属性,创建它的构造函数是 Person,构造函数的原型对象是 Person.prototype ,所以:
==person1.__proto__ == Person.prototype==
不过,要明确的真正重要的一点就是,这个连接存在于实例==person1==与构造函数==Person==的原型对象==Person.prototype==之间,而不是存在于实例person1与构造函数Person之间。
js高级程序设计图
当我们创建一个函数时:
var Person = new Object()
Person 是 Object 的实例,所以 Person 继承了Object 的原型对象Object.prototype上所有的方法:
获取对象的原型
标签:正是 存在 设计图 自带 创建 otp ima 高级 子类
原文地址:https://www.cnblogs.com/y-dt/p/9381443.html