原型对象、继承

2 篇文章 0 订阅

javascript创建对象:
组合使用构造函数模式和原型模式

function Person(name, age) {
    this.name = name,
    this.age = age,
    this.friends = ["hanmei", "lileilei"]
}
Person.prototype = {
    constructor: Person,
    sayName: function () {
        alert("hello world")
    }
}
var p = new Person;
var t = new Person;
p.friends.push("DIdi")
console.log(p.friends)// ["hanmei", "lileilei", "DIdi"]
console.log(t.friends)// ["hanmei", "lileilei"]

实例属性在构造函数中定义,而实例共享的属性constructor和方法则是在原型中定义的。
构造函数与原型混成的模式,是定义引用类型的一种默认模式

这里写图片描述

关于Js原型和原型链
可参考
https://www.jianshu.com/p/dee9f8b14771
https://www.jianshu.com/p/652991a67186
https://www.jianshu.com/p/a4e1e7b6f4f8

以下取自javascript高级程序设计第三版
我们创建的每个函数,都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法
换句话说,不必再构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中,如下例

 function Person(){}
    Person.prototype.name = "Lenerd"
    Person.prototype.age=38
    Person.prototype.sayName=function(){
       alert(this.name)
    }
    var p=new Person;
    var t=new Person;
    console.log(Person.prototype)//{name: "Lenerd", age: 38, sayName: ƒ, constructor: ƒ}
    console.log(t.__proto__==Person.prototype)//(2)true
    alert(Person.prototype.isPrototypeOf(t))//(3)true
    console.log(Person.prototype.isPrototypeOf(p)))//(4)true
    console.log(p.hasOwnProperty("name"))//(5)false,自定义后,如p.name="ladygg"才是true
  1. Person.prototype.constructor指向Person
  2. 创建实例后,实例内部将包含一个指针proto,改指针指向构造函数的原型对象。
  3. 原型对象.isPrototypeOf()方法,确定对象间的关系。
  4. Object.getPrototypeOf(实例),返回原型对象
  5. 实例.hasOwnProperty(“属性”),判断该属性是否为原型属性

除了这些还有in操作符,无论是对象属性,还是原型对象属性:
alert(“name” in p)//true
还有hasPrototypeProperty(p,’name’)//true判断该属性是否继承自原型的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值