原型

2018-08-01  本文已影响0人  浮巷旧人

原型

1.定义:原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。

Person.prototype --原型
Person.prototype = {} 是祖先
Person.prototype.name = "Deng";
function Person() {

}
var person = new Person();
var person1 = new Person();

Car.prototype.height = 1400;
Car.prototype.lang = 4900;
Car.prototype.carName = 'BMW';
function Car(color,owner) {
this.owner = owner;
this.color = color;
}
var car = new Car('red', 'prof.ji');
var car1 = new Car('green', 'laodeng');
通过后代例如car是不能改变原型的属性
car如果没有某个属性 会去祖先里找

car.constructor 构造器的意思
=> function Car () {
}
如果 Car.prototype = {
constructor : person
} 那么就会改变构造器的值

Person.prototype.name = 'abc';
function  Person() {
//  var this = {
// 
// __proto__:Person.prototype
//}
var obj = {
    name:'sunny'
}
var person = new Person ();
person.__proto__ = obj;
 
proto是指向对象原型的,会去原型里找 ,但是这
里把原型改了,指向了obj.
Person.prototype.name = 'sunny';
function  Person() {
/ var this = { __proto__:Person.prototype}
}
var person = new Person();
1)如果加上这句Person.prototype.name = 'cherry'
这里只是相当于把房间里的内容改了,最后person.name='cherry'
2)如果Person.prototype = {name:'cherry'},这里
想让于加了个房间 换了个人  所以 person.name = 'sunny' 
/以上两种情况仅限于仅限于在 new执行之后
3)
function  Person() {
/  var this = { __proto__:Person.prototype}
}
Person.prototype.name = 'sunny';
Person.prototype = {
         name : 'cherry‘
}
var person = new Person();
这种情况是new没生成之前下面的把上面覆盖了 所
以最后person.name = 'cherry'.
Grand.prototype.__proto__ = Object.prototype
 Object.prototype.__proto__ = null
Grand.prototype.lastName = 'Deng';
function  Grand() {
}
var   grand = new Grand();
Father.prototype = grand;
function Father() {
        this.name = 'xuming';
        this.forture = {
            card : 'visa'
        };
        this.num = 100;
}
var  father =    new Father();

Son.prototype = father;
function Son() {
          this.hobbit = "smoke";
}
var  son = new Son();
eg: son.forture = 200 father无影响
  son.forture.card1 = "master"  father 自动加上了

son.num ++(=son.num+1); return100
father.num = 100 
son.num = 101
Person.prototype = {
       name : "a",
       sayName : function () {
             console.log(this.name);
     }
}
function  Person() {
         this.name = "b"
}
var person = new Person();
sayName里面的this指向谁,谁调用的方法,this就是谁
person.sayName()   => b
Person.prototype.sayName()  =>a

var obj = {}; 相当于 系统内部自动 new Object();
- var  obj = Object.create(原型); 

var  obj = {name : "sunny", age :123};
var   obj1 = Object.create(obj);
所以obj1的原型就是obj  obj1.name = 'sunny'

Person.prototype.name = "sunny";
function  Person() {
          
}
var person = Object.create(Person.prototype);

Object.create( );里面只能是 object or null
undefined.to string() null.to string()是报错的 不存在的

var num = 123;
//num.toString(); --> new Number (num).toString();
Number.prototype.toString = function () {
}这种方法叫重写 实现同名但不同功能的东西,number里有tostring这个功能 就不会去上级object里面去找了
//Number.prototype._proto _ = Object.prototype
// Object.prototype.toString = function(){
}

eg:
// Object.prototype.toString = function(){
// } 系统自带的方法
Person.prototype = {
toString : function () {
return 'hehe';
}
}
function Person() {

}
var person = new Person ():

Object.prototype.toString.call(123)
"[object Number]"
Object.prototype.toString.call(true)
"[object Boolean]"返回的是类型

var obj = Object.create(null);
obj.toString = function () {
    return "老邓身体好";
}
document.write(obj);
隐式的调用toString方法  如果不是人为的加上
obj.toString = function () {
    return "老邓身体好";
} 就会报错

Math.ceil(123.234) -->124
Math.floor(123.234) -->123
Math.random( ) 产生一个0~1之间的随机数

for(var i = 0; i<10; i++){
     var num = Math.floor(Math.random() * 100)
      console.log(num);
}随机一个数取0~100
上一篇下一篇

猜你喜欢

热点阅读